8

我有一个数据网格视图中的单元格单击事件,以在消息框中显示单击的单元格中的数据。我将其设置为仅适用于特定列并且仅当单元格中有数据时

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    if (dataGridView1.CurrentCell.ColumnIndex.Equals(3))
        if (dataGridView1.CurrentCell != null && dataGridView1.CurrentCell.Value != null)
            MessageBox.Show(dataGridView1.CurrentCell.Value.ToString());
}

但是,每当我单击任何列标题时,都会出现一个空白消息框。我不知道为什么,有什么提示吗?

4

5 回答 5

27

您还需要检查单击的单元格不是列标题单元格。像这样:

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    if (dataGridView1.CurrentCell.ColumnIndex.Equals(3) && e.RowIndex != -1){
        if (dataGridView1.CurrentCell != null && dataGridView1.CurrentCell.Value != null)
            MessageBox.Show(dataGridView1.CurrentCell.Value.ToString());   
}
于 2012-10-06T18:18:14.580 回答
2

检查那CurrentCell.RowIndex不是标题行索引。

于 2012-10-06T17:33:30.930 回答
2
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{    
    if (e.RowIndex == -1) return; //check if row index is not selected
        if (dataGridView1.CurrentCell.ColumnIndex.Equals(3))
            if (dataGridView1.CurrentCell != null && dataGridView1.CurrentCell.Value != null)
                MessageBox.Show(dataGridView1.CurrentCell.Value.ToString());
}
于 2012-10-06T21:25:01.240 回答
1

接受的解决方案抛出“对象未设置为对象的实例”异常,因为空引用检查必须在检查变量的实际值之前进行。

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{    
    if (dataGridView1.CurrentCell == null ||
        dataGridView1.CurrentCell.Value == null ||
        e.RowIndex == -1) return;
    if (dataGridView1.CurrentCell.ColumnIndex.Equals(3))
        MessageBox.Show(dataGridView1.CurrentCell.Value.ToString());
}
于 2017-02-19T18:12:28.060 回答
0

试试这个

        if(dataGridView1.Rows.Count > 0)
            if (dataGridView1.CurrentCell.ColumnIndex == 3)
                MessageBox.Show(dataGridView1.CurrentCell.Value.ToString());
于 2017-05-16T03:17:17.970 回答