我有一个包含多列和多行的 datagridview。第一列包含一个复选框。我希望用户能够选择多个复选框,然后执行操作。例如,如果他们选择了第 1 行和第 2 行中的复选框,则可以选择第 1 行和第 2 行中其他列的数据并将其传递到消息框。
我知道我需要使用 checkbox_changed 事件来做到这一点。但是我无法确定如何为多行执行此操作?
我有一个包含多列和多行的 datagridview。第一列包含一个复选框。我希望用户能够选择多个复选框,然后执行操作。例如,如果他们选择了第 1 行和第 2 行中的复选框,则可以选择第 1 行和第 2 行中其他列的数据并将其传递到消息框。
我知道我需要使用 checkbox_changed 事件来做到这一点。但是我无法确定如何为多行执行此操作?
在按钮点击事件上做:
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 并在选中复选框的行上执行操作。
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");
}
我认为你不需要任何事件我通过这段代码解决了这个问题:
//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 作为您操作的值的行我测试了这段代码,它对我有用