2011-05-03 38 views
0

我試圖通過檢查用戶是否向我的DataGridViewCell輸入了多於最大允許大小的錯誤消息來確保用戶安全。在DataGridView中將DataGridTextBoxCell設置爲值

我做:

private void dataGridView3_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
{ 
    if (e.ColumnIndex == 1) 
    { 
     string selected = (dataGridView3[e.RowIndex, 1] as DataGridViewTextBoxCell).FormattedValue.ToString(); 
     if (selected.Length > 50) 
     { 
      dataGridView3[e.RowIndex, 1].Value = selected.Take(50).ToString(); 
     } 
    } 
} 

選擇的是我的文字,但我有錯誤訊息上更新:無法將字符串轉換爲INT32 ... 如果我用= 0只是它沒有意義。這裏有什麼問題?

當我更新長度> 50的texbox時出現錯誤,它表示我的值不是整數。但它必須是一個字符串。我剛剛從同一個單元中獲取了一個字符串。

+0

能否請您詳細闡述在何處的問題是,從你的問題不明確 – V4Vendetta 2011-05-03 11:01:52

+0

單元格編輯後出現錯誤 – Cynede 2011-05-03 11:05:21

+0

我不是很確定這是否可能是**對象引起的問題**所以應該沒有問題。檢查底層數據源是否預期該列值爲**'int'** – V4Vendetta 2011-05-03 11:12:37

回答

2

你放錯地方的

dataGridView3[e.RowIndex, 1] 

它應該是列第一行和列,然後排:

dataGridView3[1, e.RowIndex] 

另外,你所要做的鑄造上DataGridViewTextBoxCell?它爲我的作品:

string selected = dataGridView3[1, e.RowIndex].FormattedValue.ToString(); 

而且我sugesstion:爲什麼在CellEndEdit使用它,而不是在CellValidating事件?然後,您可以簡化爲:

​​

編輯 細胞驗證觸發比EndEdit中更頻繁:即使在電池的選擇變化。如果不適合你,那麼就像你一樣留在CellEndEdit中。並且,如上所述,確保數據源保存字符串,而不是整數。 順便說一句:在我的VS沒有采取()函數,我與子串(),嘗試這樣的取代了它:

private void dataGridView3_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
{ 
    if (e.ColumnIndex == 1) 
    { 
     string selected = dataGridView3[1, e.RowIndex].FormattedValue.ToString(); 

     if (selected.Length > 50) 
     { 
      dataGridView1[3, e.RowIndex].Value = selected.Substring(0, 50); 
     } 
    } 
} 
+2

我相信你的意思是**列先行然後行**而不是其他方式 – V4Vendetta 2011-05-03 11:14:25

+0

+1,已經修正;) – mj82 2011-05-03 11:15:54

+0

仍然遇到了麻煩。第一 - 即使我沒有編輯單元格,CellValidating也可以工作。 – Cynede 2011-05-03 11:20:37

0

您必須將字符串轉換爲正確的整數值。您正嘗試使用字符串設置整數值,並且無法進行轉換。

+0

您認爲您提供解決方案的錯誤在哪裏? – V4Vendetta 2011-05-03 11:00:50

+0

不,我想爲DataGridViewTextBoxCell設置一個文本 – Cynede 2011-05-03 11:06:00

相關問題