【问题标题】:how to add a checkbox to a datagridview that is bound to a datasource?如何将复选框添加到绑定到数据源的datagridview?
【发布时间】:2015-04-08 00:06:48
【问题描述】:

我是 C# 新手。我需要在我的 datagridview 的“选定”列中有一个复选框字段,而不是当前显示的“False”(或“True”)文本。这个datagridview是数据绑定的,数据是通过读取一个xml文件获得的。我怎样才能做到这一点?

在写入 xml 文件之前,这是我所做的。

DataTable dtGens = new DataTable(); //creates a new Datatable object for the Gens

dtGens.TableName = "Gen Types";

DataColumn dc1 = new DataColumn("Generator");  
DataColumn dc2 = new DataColumn("alpha");
DataColumn dc3 = new DataColumn("beta");
DataColumn dc4 = new DataColumn("circuit breaker");
DataColumn dc5 = new DataColumn("description");
DataColumn dc6 = new DataColumn("Selected",System.Type.GetType("System.Boolean"));

dtGens.Columns.Add(dc1); //associates the columns to the dtGens datatable
dtGens.Columns.Add(dc2);
dtGens.Columns.Add(dc3);
dtGens.Columns.Add(dc4);
dtGens.Columns.Add(dc5);
dtGens.Columns.Add(dc6);

DataRow drow;
for (int i = 0; i < 50; i++)
{
    drow = dtGens.NewRow();
    drow["Generator"] = "Gen " + (i + 1).ToString();
    drow["alpha"] = 0.0;
    drow["beta"] = 0.0;
    drow["circuit breaker"] = 0.0;
    drow["description"] = "myGen";
    drow["Selected"] = false;
    dtGens.Rows.Add(drow);

}

//creates a new DataSet Object that will help write generator data to XML
DataSet feederProject = new DataSet();
feederProject.Tables.Add(dtGens);
feederProject.WriteXml("Generators.xml");
//preview  
DataSet feederProject = new DataSet();
feederProject.ReadXml("Generators.xml");
dataGridViewLoadsDGs.DataSource = feederProject.Tables[0];

【问题讨论】:

    标签: c# vb.net checkbox datagridview datatable


    【解决方案1】:

    绑定到布尔类型的列会自动显示复选框。问题是 DataTable 的架构信息在写入 XML 时会丢失。 为了防止这种情况,您可以使用an overload of DataSet.WriteXml,它以XmlWriteMode 作为参数,它允许您选择写入架构信息。

    feederProject.WriteXml("Generators.xml", XmlWriteMode.WriteSchema);
    

    【讨论】:

      【解决方案2】:

      为了能够将绑定的布尔数据表示为复选框列,您需要将 DataGridView 的 AutoGenerateColumns 属性设置为 false。然后手动添加列,并为必须是复选框列的列设置 DataGridViewCheckBoxColumn 的实例:

      dataGridViewLoadsDGs.AutoGenerateColumns = false;
      ...
      dataGridViewLoadsDGs.Columns.Add(new DataGridViewCheckBoxColumn());
      

      【讨论】:

      • 谢谢。但是我仍然需要将原始数据关联到这个新的复选框列。简单地添加复选框列对我没有帮助。即如果原始数据设置为“true”,则应勾选复选框,反之亦然。我检查了 writexml(string) 方法实际上将所有列转换为字符串,而不管用于数据表列的原始数据类型是什么。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-26
      相关资源
      最近更新 更多