如何在Winform应用程序中获取datagridview中特定单元格的值

本文关键字:单元格 datagridview 获取 Winform 应用程序 | 更新日期: 2023-09-27 18:15:59

我有一个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
    } 

如何在Winform应用程序中获取datagridview中特定单元格的值

你也可以使用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();
    }

和使用系统。Linq命名空间。

因为你已经绑定了你的数据表网格数据源,你可以使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)
            {
            }
        }
    } 
}

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

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));        
    }
}    

在click事件结束时,全局变量将被填充为选中SELECT单元格的员工的ID