繁体   English   中英

C#Datagridview复选框已选中事件-多行?

[英]C# Datagridview Checkbox Checked Event - multiple rows?

我有一个包含多个列和行的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作为操作值的行,我测试了此代码,它对我有用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM