当我离开单元格时,我正试图对单元格的内容进行一些文本处理。我有以下代码,但是当我在单元格中输入任何文本然后离开它时,我得到以下异常。
An unhandled exception of type 'System.NullReferenceException' occurred in Program.exe
Additional information: Object reference not set to an instance of an object.
如果我在.value
上方断开鼠标悬停,它确实为空,但我已将数据输入到单元格中!那是什么给出了什么?
private void dataGridView1_CellLeave(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 3)
{
string entry = "";
MessageBox.Show(dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());
MakeTextFeet(entry);
}
if (e.ColumnIndex == 4)
{
string entry = dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString();
MakeTextFeet(entry);
}
}
答案 0 :(得分:2)
当DataGridView CellLeave事件触发时,单元格的值处于临时状态。这是因为DataGridView可能绑定到数据源,并且不会提交更改。
您最好的选择是使用CellValueChanged事件。
答案 1 :(得分:1)
添加一些支票:
DataGridViewCell MyCell = dataGridView1[e.ColumnIndex, e.RowIndex];
if (MyCell != null)
{
if (MyCell.Value != null)
{
}
}
答案 2 :(得分:1)
我认为你想处理CellEndEdit而不是CellLeave。
在CellLeave上,编辑过的单元格的Value属性仍然保持不变(例如,通过断开和检查Value观察到的空单元格为null)。在CellEndEdit上,已设置其新值。
尝试这样的事情,其中我试图通常坚持原始代码:
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
DataGridViewCell cell = dataGridView1[e.ColumnIndex, e.RowIndex];
if (e.ColumnIndex == 3 || e.ColumnIndex == 4)
{
string entry = "";
if (cell.Value != null)
{
entry = cell.Value.ToString();
}
MessageBox.Show(entry);
MakeTextFeet(entry);
}
}
答案 3 :(得分:0)
我认为你要留下一个空白区域并试图处理它的价值。
当您留下以下代码的空白单元格值时:
string entry = dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString();
字符串条目中的值将为空格(entry =“”) 当你通过将它传递给另一个函数[MakeTextFeet(entry);]来进一步处理这个值时,它会给你错误。
从我的角度来看,这个问题的解决方案是>>>
将每行代码放在上面的方法中,MakeTextFeet(Entry)也在try块中。
当你写下catch块时,将该块留空。 例如
try
{
.
.
.
}
catch(Exception)
{
}
通过这件事,你的例外自然会被抓住,但由于其不可忽视,它不会告诉你。