带有复选框列的DateGridview

时间:2015-09-17 19:21:43

标签: c# winforms datagridview

在我的datagridview中有复选框列。根据数据库中的值,希望在运行时检查datagridview中的复选框并将其显示给用户。

for (int i = 0; i < supName.Count; i++) 
{
     foreach (DataGridViewRow row in dataGridView2.Rows)
     {
         int supId = Convert.ToInt32(row.Cells["supplierId"].Value.ToString());
         if (supId == supName[i])
         {  
             row.Cells["selectSupplier"].Value = true;
         }
     }       
 }

对于一个项目,可以有多个供应商。向数据库添加新项目时,所有现有供应商都显示在数据网格视图中。在此datagridview中,有一个复选框列,允许用户选择相关的供应商。

当检索有关某个项目的信息时,我想检查用户为上述datagridview中的特定项目选择的供应商的复选框(与所有现有供应商的datagridview)。

上面是我用来检查复选框的代码,但是没有选中复选框。 复选框列名称为“selectSupplier”。

谢谢

1 个答案:

答案 0 :(得分:0)

如果supName列表包含行的supplierId,则嵌套循环会检查一行。我发现的第一个问题是,如果你没有将“AllowUserToAddRows”设置为false,你的内部循环将尝试将空行解析为整数并抛出异常。这强调了try-catch块的重要性和正确的错误处理。

您的方法效率也很低,订单[n * m]。最终,我们大多数人会建议使用数据绑定(https://msdn.microsoft.com/en-us/library/fbk67b6z%28v=vs.90%29.aspx)。您可以将数据库表直接“链接”到DataGridView和供应商ID,并免费查看。您可能需要一个简单的LINQ命令(https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b)来执行供应商“存在”验证。

如果您不想或不能使用数据绑定,只需使用内部循环即可执行相同的结果,并使用supName.Contains(supId)获取订单[m]。