it-swarm.com.ru

событие щелчка ячейки datagridview

У меня есть событие для щелчка по ячейке в представлении сетки данных, чтобы отобразить данные в ячейке, по которой щелкнули, в окне сообщения. Я установил, где он работает только для определенного столбца и только если есть данные в ячейке

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

однако всякий раз, когда я щелкаю по любому из заголовков столбцов, появляется пустое окно сообщения. Я не могу понять, почему, какие-либо советы?

6
Stonep123

Вам также нужно будет проверить, что нажатая ячейка не является ячейкой заголовка столбца. Как это: 

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());   
}
21
Saurabh R S

Убедитесь, что CurrentCell.RowIndex не является индексом строки заголовка.

2
Steve Wellens

Принятое решение выдает исключение «объект не установлен как экземпляр объекта», так как проверка нулевой ссылки ДОЛЖНА выполняться перед проверкой действительного значения переменной.

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());
}
1
Peter Bulyaki
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());
}
1
spajce

попробуй это

        if(dataGridView1.Rows.Count > 0)
            if (dataGridView1.CurrentCell.ColumnIndex == 3)
                MessageBox.Show(dataGridView1.CurrentCell.Value.ToString());
0
Ramgy Borja