【问题标题】:How to get Value of specific cell of datagridview in Winform application如何在Winform应用程序中获取datagridview特定单元格的值
【发布时间】:2014-08-02 08:49:10
【问题描述】:

我有一个 dataGridView,其中包含第一列中的复选框。现在,根据我的要求,我必须获取在另一个按钮单击事件上单击其复选框的行的 Employee No 列的值。此外,如何获取选中的多个复选框的值。

这是我的代码..

    private void btn_load_Click(object sender, EventArgs e)
    { 
        DataTable dt = new DataTable();
        dt.Columns.Add("Select", System.Type.GetType("System.Boolean"));
        dt.Columns.Add("Employee No");
        dt.Columns.Add("Employee Name");
        dt.Columns.Add("Join Date");

        DataRow dr;

        for (int i = 0; i <= 10; i++)
        {
            dr = dt.NewRow();
            dr["Select"] = false;
            dr["Employee No"] = 1000 + i;
            dr["Employee Name"] = "Employee " + i;
            dr["Join Date"] = DateTime.Now.ToString("dd/MM/yyyy");

            dt.Rows.Add(dr);
        }

        dataGridView1.AllowUserToAddRows = true;
        dataGridView1.AllowUserToDeleteRows = true;
        dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;

        dataGridView1.DataSource = dt; 
    } 

    private void btn_Click(object sender, EventArgs e)
    {
        //I need the Employee Id values here
    } 

请帮助我。在此先感谢..

【问题讨论】:

  • 使用DataGridView_CellContentClick事件捕获Employee Id值
  • 私有子 DataGridView_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) 处理 DataGridView.CellContentClick If DataGridView.Rows(DataGridView.CurrentCell.RowIndex).Cells(0) .Value = True Then '做某事 End If End Sub

标签: c# winforms checkbox datagridview


【解决方案1】:

您也可以使用 DataSource 属性:

    private void btn_Click(object sender, EventArgs e)
    { 
       int[] employeeIds = (dataGridView1.DataSource as DataTable).Rows
           .Cast<DataRow>()
           .Where(r => (bool)r["Select"])
           .Select(r => Convert.ToInt32(r["Employee No"]))
           .ToArray();
    }

并使用 System.Linq 命名空间。

【讨论】:

    【解决方案2】:

    由于您已将 DataTable 绑定到网格数据源,您可以将 dt 设为类变量并使用它来检查选定的变量。

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    
        private DataTable dt;
    
        private void btn_load_Click(object sender, EventArgs e)
        {
            dt = new DataTable();
            dt.Columns.Add("Select", System.Type.GetType("System.Boolean"));
            dt.Columns.Add("Employee No");
            dt.Columns.Add("Employee Name");
            dt.Columns.Add("Join Date");
    
            DataRow dr;
    
            for (int i = 0; i <= 10; i++)
            {
                dr = dt.NewRow();
                dr["Select"] = false;
                dr["Employee No"] = 1000 + i;
                dr["Employee Name"] = "Employee " + i;
                dr["Join Date"] = DateTime.Now.ToString("dd/MM/yyyy");
    
                dt.Rows.Add(dr);
            }
    
            dataGridView1.AllowUserToAddRows = true;
            dataGridView1.AllowUserToDeleteRows = true;
            dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
    
            dataGridView1.DataSource = dt;
        }
    
        private void btn_Click(object sender, EventArgs e)
        {
            //I need the Employee Id values here
            foreach (DataRow row in dt.Rows)
            {
                if ((bool)row["Select"] == true)
                {
    
                }
            }
        } 
    }
    

    【讨论】:

      【解决方案3】:

      假设在你的表单类中有一个全局变量声明为

      List<int> empIDs = new List<int> empIDs();
      

      现在在你的点击事件中你可以写

      private void btn_Click(object sender, EventArgs e)
      {
          empIDs.Clear();
          foreach(DataGridViewRow r in dgv.Rows)
          {
              DataGridViewCheckBoxCell c = r.Cells["Select"] as DataGridViewCheckBoxCell;
              if(Convert.ToBoolean(c.Value))
                  empIDs.Add(Convert.ToInt32(r.Cells["Employee No"].Value));        
          }
      }    
      

      在单击事件结束时,全局变量将填充有单击其 SELECT 单元格的员工的 ID

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多