如何只获取datagridview的已检查行的ID

时间:2014-02-04 11:05:04

标签: c# database checkbox datagridview

我有一个datagridview,其中包含从数据库中的Subject表填充的主题列表.Columns include

  • 选择(复选框),
  • SubjectId,
  • 主旨名称,
  • SubjectGroup。

现在我希望如果用户选择任何所需的行,则应将相应的SubjectId添加到列表。我已经制作并插入数据库中的所需表格。 问题是我没有检测到我添加到此数据网格视图的新列复选框。

我的代码是:

    foreach (DataGridViewRow row in gvSubjectsOpted.Rows)
        {

            if (Convert.ToBoolean(gvSubjectsOpted.SelectedRows[0].Cells["SelectId"].Value=true))
            {
                olist.Add(gvSubjectsOpted.SelectedRows[0].Cells["SubjectId"].Value.ToString());
            }
        }

5 个答案:

答案 0 :(得分:8)

晚会。尝试按名称获取复选框列时遇到了同样的问题,请使用索引。这是一个linq示例,假设复选框是第0列,TrueValue和FalseVale的存储值分别为true和false。

        var checkedRows = from DataGridViewRow r in gvSubjectsOpted.Rows
            where Convert.ToBoolean(r.Cells[0].Value) == true
            select r;

        foreach (var row in checkedRows)
        {
            olist.Add(row.Cells["SubjectId"].Value.ToString());
        }

答案 1 :(得分:0)

你的问题与另一个问题类似。

检查此Datagridview checkboxcolumn value and functionality的答案。

答案 2 :(得分:0)

试试这个

foreach(GridViewRow r in gvSubjectsOpted.Rows)
{
    GridViewCheckBoxColumn c = r.cells[0].Controls[0] as GridViewCheckBoxColumn;
    if(c.Checked)
    {
      //Do something.
    }
}

答案 3 :(得分:0)

private void button1_Click(object sender,EventArgs e)

    {   
        string subjId;   
        List<string> lines = new List<string>();   
        for (int i = 0; i < gvSubjectsList.Rows.Count; i++)   
        {   
       bool Ischecked =Convert.ToBoolean(gvSubjectsList.Rows[i].Cells["Select"].Value);    
            if (Ischecked == true)   
            {   
                subjId = gvSubjectsList.Rows[i].Cells["SubjectId"].Value.ToString();   
                lines.Add(subjId);   
            }   
    }
    comboBox1.DataSource = lines;     

    }  

//最重要的是对新添加的checkboxcolumn而不是'0'和'1'设置'true'和'false'值...即

CBColumn.FalseValue =“false”;
CBColumn.TrueValue =“true”;

答案 4 :(得分:0)

我意识到这是一篇很老的帖子,但是我发现它并没有认为它是以一种有效的方式回答的,所以我想我会添加我的方法。

我的Windows应用程序中有一个类似的块。当用户单击按钮时,我从网格中读取值,并且我想知道它们检查了哪些行。由于复选框位于单元格0中,而我想要的数据位于单元格1中,因此我使用以下代码。注意演员:它很重要,因为它允许我们使用Where子句,因此只需要一行代码来获取数据集合。我可以使用单元格的名称而不是魔术索引号但是它不适合你的应用程序,所以我把数字代替(你应该使用名字)

    var checkedRows = dataGridView
        .Rows
        .Cast<DataGridViewRow>()
        .Where(x => x.Cells[0].Value.ToString() == "1")
        .Select(x => x.Cells[1]);

请注意,这将为您提供一个类型为DataGridViewCell的IEnumerable。如果您愿意,可以在选择中添加.Value.ToString()之类的内容,或者在使用集合时执行此操作。