在DataGridView中设置为DataGridTextBoxCell
本文关键字:DataGridTextBoxCell 设置 DataGridView | 更新日期: 2023-09-27 17:54:15
我试图通过检查用户是否输入了超过我的DataGridViewCell的最大允许大小来保护用户免受错误消息。
I'm making:
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的文本框时出现错误,它说我的值不是整数。但它必须是字符串。我刚刚从同一个单元格中读取了一个字符串
你放错了行和列
dataGridView3[e.RowIndex, 1]
应该先列后行:
dataGridView3[1, e.RowIndex]
此外,你是否必须在DataGridViewTextBoxCell上做cast ?
string selected = dataGridView3[1, e.RowIndex].FormattedValue.ToString();
和我的建议:为什么使用它在CellEndEdit,而不是在cellvalididating事件?然后可以简化为:
e.FormattedValue.ToString()
编辑单元格验证比EndEdit更频繁地触发,即使在单元格选择更改时也是如此。如果它不适合你,那么不如像你那样继续使用CellEndEdit。并且,如前所述,确保数据源保存字符串,而不是整数。顺便说一句:在我的VS中没有Take()函数,我用Substring()代替了它,试试这样:
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);
}
}
}
您必须将字符串转换为正确的整型值。