最近又再度試著把公司的ERP系統從VS2002升級至VS2005,運用升級精靈的過程中是沒遇到什麼問題,也沒花多少時間,讓我一時有了"無痛升級"的感覺,執行試跑後,痛開始來了,怎麼輸入了一個代號,沒有自動帶出名字,從Debug模式中去看,事件有觸發啊,怎麼會沒帶出名字,只好Step by Step的一行一行跑,結果發現了一行很玩味的情況.


 


以下這幾段程式碼為重現問題範例 :


        private void Form1_Load(object sender, System.EventArgs e)
{
DataTable dt = new DataTable("Test");
dt.Columns.Add("AA",typeof(string));
dt.Columns.Add("BB", typeof(string));
for (int i = 1; i < 6;i++ )
{
DataRow dr = dt.NewRow();
dr["AA"] = "A" + i.ToString();
dr["BB"] = i.ToString();
dt.Rows.Add(dr);
}
DataGrid1.DataSource = dt;
dataGridTextBoxColumn1.TextBox.Validated+=new EventHandler(TextBox_Validated);
}

void TextBox_Validated(object sender, EventArgs e)
{
int r = DataGrid1.CurrentRowIndex;
MessageBox.Show(DataGrid1[r, 0].ToString()+" "+ ((TextBox)sender).Text.Trim());
}


 


在表單載入時,先放入測試資料到DataGrid1裡,所以執行後,會看到下面這個畫面:



 


  VS2002與VS2005在這表單軟入部份都沒有問題,而差異點在TextBox_Validated這個事件內.如果我把左上第一個欄位的值改為BB後,VS2002跟VS2005所MessageBox.Show出來的結果是不同的.


 


VS2002 所 Show的值:


DataGrid1[r,0].ToString()  ==> A1


((TextBox)sender).Text.Trim() ==> BB


 


VS2005 所 Show的值:


DataGrid1[r,0].ToString()  ==> BB


((TextBox)sender).Text.Trim() ==> BB


 


  同樣的DataGrid1[r,0].ToString()在同樣的Validated事件內,抓到的值是不一樣的,VS2002所帶出來的值也因此,我原本會帶出的名稱,為此因素,所以名稱就沒帶出來了.


 


  另一個問題也很奇怪,在VS2002內,在Cell內,不論是用方向鍵去換Cell,還是Tab鍵,Enter鍵,還是滑鼠去點任一Cell,都會觸發Validated事件,而VS2005大部份也會觸發,只有"Enter鍵"不會Validated事件,這讓人很不解,程式碼都一樣,但結果是不同的.


 


看來後面還會有不少的痛......

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 jeffyeh 的頭像
    jeffyeh

    jeffyeh

    jeffyeh 發表在 痞客邦 留言(0) 人氣()