2013年6月10日 星期一

ASP.Net 隱藏 RadioButtonList 裡的項目

ASP.Net 的 RadioButtonList 是一個蠻好用的控制項,用了他就不用拉好幾個 RadioButton 了。不過有一個困擾的地方就是他的 Item 並沒有 Visible 的屬性,使得有時想要隱藏某些項目時感覺有些困擾

其實,沒有 Visible 屬性也沒有關係,他有 Arrtibutes 屬性可以用,只要用
RadioButtonList1.Items[0].Attributes.Add("style", "display:none");
或是
RadioButtonList1.Items[0].Attributes["style"] = "display:none";
就可以隱藏第 0 個 item 了

提供給大家參考

2013年6月7日 星期五

在 Windows Server 2003 上執行 ASP.Net 網站,無法呼叫 MSDTC 的注意事項

  1. 確定 MSDTC 服務確實有啟動
    可以到控制台的服務,或是於 cmd 視窗下輸入 sc query msdtc 來檢查
    看到 STATE 是 4 RUNNING 就表示 MSDTC 正常服務中
    2013-06-07_163511
  2. 確定 IIS 有安裝「啟用網路 DTC 存取」
    這一點常常會漏勾喔
     2013-06-07_163826

2012年9月13日 星期四

使用 ADO 透過 ODBC 連接至 SQLite,用 OpenSchema 取得 Table Name 會亂碼的解決方法

最近開始使用 SQLite 當作應用程式的本地資料儲存媒體,當然也想要針對 SQLite 資料庫做一些管理跟查詢工作。雖然網路上可以找到需付費或是不須付費的 SQLite 管理工具,但是還是想使用自製的 DB 工具來查詢資料。畢竟用慣了,哪裡用得不爽還可以自己改一改。

但是自製的 DB 工具使用的是 ADO 來連接資料庫,對於 SQLite 的免費連接方案只有 SQLite ODBC Driver 了

連接上是沒有問題,也可以正常的擷取資料,無亂碼
不過使用 OpenSchema 來取得資料庫中的 table,以及 table 中的欄位時,卻出現了亂碼

2012-09-13_085411

解決方法如下:
開啟 ODBC 設定,將「OEMCP Translation」打勾,就 OK 了

2012-09-13_085738

設定完成之後,就可以正確的抓到中文的 table name 跟 column name 了

2012-09-13_090117

2012年3月21日 星期三

ASP.Net 要透過加入 AD 的 ExchangeServer 發郵件的方法

1. 讓 ASP.Net 信任 ExchangeServer 的自訂憑證

在 Global.asax.cs 裡面的 Application_Start 事件加入以下這行:

ServicePointManager.ServerCertificateValidationCallback += 
    new RemoteCertificateValidationCallback(ValidateServerCertificate);

以及在 Global.asax.cs 加入這個靜態方法

public static bool ValidateServerCertificate(Object sender, 
    X509Certificate certificate, X509Chain chain, 
    SslPolicyErrors sslPolicyErrors)
{
    return true;
}

using 要加入

using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;

2. 發郵件時程式

SmtpClient sc = new SmtpClient();
sc.Credentials = CredentialCache.DefaultNetworkCredentials;
sc.EnableSsl = true;
sc.Send(mm);    // mm 是 MailMessage

3. 在 web.config 中設定好

<system.net>
    <mailSettings>
        <smtp from="寄信人信箱" deliveryMethod="Network">
            <network host="郵件主機"
                port="埠號"
                userName="登入帳號"
                password="登入密碼"
                defaultCredentials="true" />
        </smtp>
    </mailSettings>
</system.net>

4. 將 IIS 的應用程式集區設定為「整合式」

2011年12月15日 星期四

Crystal Report 9 以後適用的“拆解長字串成多行”函數

//
// 將長字串拆解成數行,中間用 CR+LF 分開
// Crystal Report 9 以後適用
//
StringVar s := {要拆解的欄位};                // 要拆解的字串
StringVar output := '';                     // 輸出字串
NumberVar CharsInALine := 20;               // 一行幾個字
NumberVar currLength := 0;
while Length(s) > 0 do
(
  // 這只是很粗略的判斷,假定使用者只會輸入半形英數字跟中文字,
  //
不會使用半形的特殊符號,如半形日文假名
  if AscW(s) > 256 then
  (   
    currLength := currLength + 2;           // 中文字,長度 + 2
  )
  else
  (
    currLength := currLength + 1;           // 文數字,長度 + 1
  );
  output := output + s[1];
  if currLength >= CharsInALine then
  (
    output := output + Chr(13) + Chr(10);
    currLength := 0;
  );
  s := Mid(s, 2);
);
output;

2011年10月9日 星期日

用 NPOI 在 Excel 工作表中畫斜線

程式碼如下:
using NPOI;
using NPOI.SS.UserModel;
using NPOI.HSSF.UserModel;

……

// 於工作表上建立 HSSFPatriarch,注意!一張工作表只可以建立一個 HSSFPatriarch
HSSFPatriarch p = sheet1.CreateDrawingPatriarch() as HSSFPatriarch;

// new HSSFClientAnchor(dx1, dy1, dx2, dy2, col1, row1, col2, row2) // 就是從 (col1, row1) 儲存格的 (dx1, dy1) 點 // 到 (col2, row2) 儲存格的 (dx2, dy2) 點建立一個繪圖物件的涵蓋範圍 HSSFClientAnchor a = new HSSFClientAnchor(0, 0, 0, 0, 0, 0, 1, 1); // 建立一個 HSSFSimpleShape 繪圖物件,範圍是 a,物件會充滿整個範圍 HSSFSimpleShape s = p.CreateSimpleShape(a); s.ShapeType = HSSFSimpleShape.OBJECT_TYPE_LINE; // 設定線條類型為線條 s.LineStyle = HSSFSimpleShape.LINESTYLE_SOLID; // 設定為實線 s.LineWidth = 1; // 限定線條寬度為 1

2011年9月15日 星期四

dbExpress 啟動交易時,出現「與異動管理員建立連線的要求遭到拒絶」訊息的 Trouble Shotting

前天收到同事傳來的一封郵件,裡面提到他有一個挑單畫面,挑單之前會先修改數量然後再挑單 (修改的數量不需要更新回資料庫)。挑單確定之後,根據挑選到的資料去異動另外一個資料表。可是,當異動另外一個資料表時,發生了「與異動管理員建立連線的要求遭到拒絶」的錯誤訊息。

原先我以為是 MSDTC 服務沒有啟動,請他確定是否有啟動,同事說已經啟動了仍然發生錯誤,接下來同事貼了他的程式碼,說是在啟動交易時發生的錯誤訊息。

於是我想到是不是因為挑單畫面的「修改數量」產生了擱置的異動,使得接下來的交易啟動時,因為有擱置的異動而無法啟動?

在說明如何修改之前,先說明一下挑單畫面的結構。
挑單畫面的組成很簡單,一個 PageControl,第一頁是挑單畫面,第二頁是查詢畫面。進入挑單時切到第一頁,可以預先傳入條件查詢出可供挑單的資料,也可以手動切換到第二頁自行查詢出供挑單的資料。查詢是使用 SQLQuery + DataSetProvider + ClientDataSet,以 TDBGrid 顯示資料。

我的想法是:如果能避免產生「擱置的異動」,就不會阻擋到接下來的交易了。

於是做了這樣的修改:

  1. 清除畫面上 ClientDataSet 的 ProviderName 屬性
  2. ClientDataSet.Open 之前,設定 ProviderName 屬性,讓 ClientDataSet 可以接到後面的資料來源,把資料收進來
  3. ClientDataSet.Open 之後,清除 ProviderName 屬性,使 ClientDataSet 做出的所有異動與後面的資料來源隔離開來

經過這樣的修改,這個問題就解決了。在此提供給大家做個參考。