У меня есть datagridview с несколькими столбцами и строками. Первый столбец содержит флажок. Я хочу, чтобы пользователь мог выбрать несколько флажков, а затем выполнить действие. Например, если они выбирают флажки в строках 1 и 2, данные из других столбцов в строках 1 и 2 могут быть выбраны и переданы в ящик сообщений.
Я знаю, что для этого нужно использовать событие checkbox_changed. Однако у меня возникают проблемы с тем, как это сделать для нескольких строк?
На кнопке Click event do:
static int SelectColumnIndex = 0;
PerformAction_Click(object sender, System.EventArgs e)
{
string data = string.Empty;
foreach(DataGridViewRow row in MyDataGridView.Rows)
{
if(row.Cells[SelectColumnIndex].Value!=null &&
Convert.ToBoolean(row.Cells[SelectColumnIndex].Value) == true)
{
foreach(DataGridViewCell cell in row.Cells)
{
if(cell.OwningColumn.Index!= SelectColumnIndex)
{
data+= (cell.Value + " ") ; // do some thing
}
}
data+="\n";
}
}
MessageBox.Show(data, "Data");
}
static int SelectColumnIndex = 0;
PerformAction_Click(object sender, System.EventArgs e)
{
string data = string.Empty;
foreach(DataGridViewRow row in MyDataGridView.Rows)
{
if(row.Cells[SelectColumnIndex].Value != null
&&
Convert.ToBoolean(row.Cells[SelectColumnIndex].Value) == true)
{
foreach(DataGridViewCell cell in row.Cells)
{
if (cell.OwningColumn.Index != SelectColumnIndex)
{
data+= (cell.Value + " ") ; // do some thing
}
}
data+="\n";
}
}
MessageBox.Show(data, "Data");
}
Если вы хотите, чтобы пользователь нажал кнопку для выполнения действия, то вам нужно обработать событие Click кнопки, а не событие CheckBox Changed... Когда кнопка нажата, просто пройдите через все строки вашего DataGridView и выполнить действие над строками с отмеченным флажком.
Я думаю, вам не нужно какое-либо событие Я решил эту проблему с помощью этого кода:
//In Fill DataGridViewEvent :
DataGridViewCheckBoxColumn ChCol = new DataGridViewCheckBoxColumn();
ChCol.Name = "CheckedRow";
ChCol.HeaderText = "انتخاب";
ChCol.Width = 50;
ChCol.TrueValue = "1";
ChCol.FalseValue = "0";
dg.Columns.Insert(0, ChCol);
// In Button Event put these codes:
try
{
MessageBox.Show(row.Cells[2].Value.ToString() + " --> " +
row.Cells["CheckedRow"].Value.ToString());
}
catch
{
// Nothing Act
}
enter code here
Ваш результат по этому параметру: ItemID → 0//Для непроверенных значений ItemID → 1//Для проверенных значений
Теперь вы можете фильтровать строки, которые возвращают 1 как значение для вашего действия я тестировал этот код, и он работает для меня