5

当单元格离开时,我正在尝试对单元格的内容进行一些文本处理。我有以下代码,但是当我在单元格中输入任何文本然后离开时出现以下异常。

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);
    }
}
4

4 回答 4

3

当 DataGridView CellLeave 事件触发时,单元格的值处于瞬态。这是因为 DataGridView 可能绑定到数据源,而更改尚未提交。

您最好的选择是使用CellValueChanged事件。

于 2012-11-13T05:23:45.703 回答
1

添加一些检查:

DataGridViewCell MyCell =  dataGridView1[e.ColumnIndex, e.RowIndex];

if (MyCell != null)
{
    if (MyCell.Value != null)
    {
    }
}
于 2012-11-13T03:44:33.477 回答
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);
    }
}
于 2012-11-13T05:03:50.227 回答
0

我认为您正在留下一个空白单元格并尝试处理其值。

当您将留下以下代码的空白单元格值时:

string entry = dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString();

字符串条目中的值将是空格(entry=""),当您通过将其传递给另一个函数[ MakeTextFeet(entry);] 进一步处理此值时,它会给您错误。

从我的角度来看,这个问题的解决方案是>>>

将每一行代码也放入上述方法中,并将 MakeTextFeet(Entry) 也放入 try 块中。

当您将编写 catch 块时,将该块留空。例如。

try
{
.
.
.
}
catch(Exception)
{
}

通过这个东西,你的异常自然会被捕获,但由于它微不足道,它不会显示给你。

于 2012-11-13T02:32:58.780 回答