【问题标题】:Getting value from checkbox checked in datagridview c#从datagridview c#中选中的复选框获取值
【发布时间】:2016-11-11 08:50:20
【问题描述】:

我在从 datagridview 中选中的复选框中获取值时遇到问题。我想获取选中复选框的所有 Id,但我只检查了最新的。

这是我的代码:

string Id = "";

ds_utilityTableAdapters.tbl_membersTableAdapter tam = new ds_utilityTableAdapters.tbl_membersTableAdapter();    
ds_utility.tbl_membersDataTable dtm = new ds_utility.tbl_membersDataTable();

foreach (DataGridViewRow row in dgv_members.Rows)    
{        
    if (row.Cells[0].Value != null && (Boolean)row.Cells[0].Value == true)
    {
        Id= row.Cells[1].Value.ToString();

        // using Id to display data in crystal report viewer  
        // but only read the latest checkbox value

        dtm = tam.GetDataBy_SearchId(Id); 

        // in my dataset (ds_utility), I wrote the query like this
        // SELECT * FROM tbl_members WHERE (Id = ?)
    }
}

如何编写查询来获取所有值?

【问题讨论】:

  • 看起来您正在循环中覆盖“dtm”对象。因此,在这种情况下,每次迭代后它将包含来自当前 ID 的数据。自然地,在最后一次迭代之后,它将仅包含来自最后一个 Id 的数据。
  • @vaxlt 感谢您的回复。您能解释一下我应该在哪里放置“dtm”或如何编写正确的查询以获得所有值吗?

标签: c# checkbox datagridview datatable tableadapter


【解决方案1】:

据我所知,您有多种选择:

创建 ds_utility.tbl_membersDataTable 列表,并在每次迭代后将表添加到列表中。这是最简单的方法,但它会给您带来问题,因为您必须首先遍历多个表。它看起来像这样:

string Id = "";

ds_utilityTableAdapters.tbl_membersTableAdapter tam = new    ds_utilityTableAdapters.tbl_membersTableAdapter();       List<ds_utility.tbl_membersDataTable> dtm = new List<ds_utility.tbl_membersDataTable>();

foreach (DataGridViewRow row in dgv_members.Rows)     {         if (row.Cells[0].Value != null && (Boolean)row.Cells[0].Value == true) {
    Id= row.Cells[1].Value.ToString();

    // using Id to display data in crystal report viewer  
    // but only read the latest checkbox value

    dtm.Add(tam.GetDataBy_SearchId(Id));

    // in my dataset (ds_utility), I wrote the query like this
    // SELECT * FROM tbl_members WHERE (Id = ?) } } 

但在您的情况下,最好的选择是更改 sql 查询,而不是传递一个 Id,而是传递 Id 的串联列表。您可以通过将 sql 修改为如下所示来实现这一点:

SELECT * FROM tbl_members WHERE Id in (?)

并将代码更改为:

string Id = "";

ds_utilityTableAdapters.tbl_membersTableAdapter tam = new ds_utilityTableAdapters.tbl_membersTableAdapter();    
ds_utility.tbl_membersDataTable dtm = new ds_utility.tbl_membersDataTable();
List<string> idList = new List<string>();

foreach (DataGridViewRow row in dgv_members.Rows)    
{        
    if (row.Cells[0].Value != null && (Boolean)row.Cells[0].Value == true)
    {
        Id= row.Cells[1].Value.ToString();

        // using Id to display data in crystal report viewer  
        // but only read the latest checkbox value

    idList.Add(Id);
    }
}

dtm = tam.GetDataBy_SearchId(string.Join(",", idList));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多