2014-01-22 3 views
0
private void deleteRowButton(object sender, EventArgs e) 
{ 

    if (dataGridView1.SelectionMode == DataGridViewSelectionMode.RowHeaderSelect) 
    { 
     dataGridView1.Rows.RemoveAt(dataGridView1.CurrentCell.RowIndex); 
    } 
} 

Так вот что я пробовал. Теперь без оператора if он будет работать, но он удалит строку в выбранной ячейке. Я не хочу, чтобы пользователь случайно удалил его. Как сделать так, чтобы он мог удалить строку, если пользователь выбирает заголовок строки?Как удалить строку, если пользователь выбрал заголовок строки?

Как это: Row Header selected

ответ

2

Вы можете подписаться на CellClick события и проверить значение e.ColumnIndex:

if (e.ColumnIndex == -1) 
{ 
    dataGridView1.Rows.RemoveAt(e.RowIndex); 
} 

Или вы можете подписаться на CellDoubleClick событие (используя один и тот же код), если вы хотите чтобы быть увереннее, что они случайно не удалили строки.


Поскольку у вас есть кнопки вы хотите использовать, я бы сказал, попробуйте следующее:

if (dataGridView1.CurrentRow != null && dataGridView1.CurrentCell.ColumnIndex == -1) 
{ 
    dataGridView1.Rows.RemoveAt(dataGridView1.CurrentRow.Index); 
} 

Но по какой-то причине, он всегда возвращает 0 для CurrentCell.ColumnIndex, даже если выбран заголовок строки ,

Я полагаю, вы могли бы еще подписаться на CellClick событие, а просто сохранить текущий индекс строки в переменной класса уровня, вы можете проверить на кнопку:

private bool isRowHeaderSelected = false; 

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    isRowHeaderSelected = (e.ColumnIndex == -1); 
} 

private void deleteRowButton(object sender, EventArgs e) 
{ 
    if (isRowHeaderSelected) 
     dataGridView1.Rows.RemoveAt(dataGridView1.CurrentCell.RowIndex); 
} 
+0

Так что я не могу просто использовать свою кнопку? Извините, я забыл упомянуть, что это была кнопка для использования. Просто не знаком с событием CellClick. – puretppc

+0

@puretppc См. Мое редактирование. –

+0

Спасибо, он работает :) – puretppc

1

Я предполагаю, что вы пишете WinForms. Почему бы вам не поместить удаление за MessageBox? Какое событие datagridview вы вкладываете в это?

if (e.ColumnIndex == -1) 
{ 
     DialogResult dr = MessageBox.Show("Are you sure that you want to delete", "Are you sure?", MessageBoxButtons.YesNo); 
     if (dr == DialogResult.Yes) 
     { 
      dataGridView1.Rows.RemoveAt(dataGridView1.Rows[e.RowIndex]); 
     } 
} 
+0

Ухм это кнопка. И он будет работать, только если пользователь выбрал то, что он выглядит на выделенной части моего изображения. – puretppc

+0

Это не кнопка, это особый тип DataGridViewColumn. И есть много событий click в DGV, каждый со своими особенностями. CellClick, CellDoubleClick, CellContentClick, CellMouseClick, CellMouseDoubleClick, MouseClick, MouseDoubleClick, и список продолжается – wruckie

Смежные вопросы