CellLeave上的DataGridView单元格为null

时间:2012-11-13 02:12:42

标签: c# datagridview visual-studio-2012

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

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 个答案:

答案 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)
{
}

通过这件事,你的例外自然会被抓住,但由于其不可忽视,它不会告诉你。