使用值在DataTable中添加bool列

时间:2017-08-17 07:28:47

标签: c# wpf datatable boolean

我尝试在datatable中添加列:

dt.Columns.Add(new DataColumn("BoolProperty", typeof(bool)));

并尝试设置值 - false:

DataRow dr = dt.NewRow();
dr["BoolProperty"] = false;

但它不起作用!这是代码:

try
{
    con.server = this.server;
    con.user = this.user;
    con.password = this.password;
    con.OpenConnection();
    con.SqlQuery(Properties.Resources.databaseCatalogResource);
    DataTable dt = con.QueryEx();
    con.da.Fill(dt);
    dt.Columns.Add(new DataColumn("BoolProperty", typeof(bool)));
    DataRow dr = dt.NewRow();
    dr["BoolProperty"] = false;
    dataGrid.ItemsSource = dt.DefaultView;

}
catch (Exception ex)
{
    MessageBox.Show("Грешка във връзката.", "Грешка");
}

这是发生的事情: :)

但我需要取消选中此列。

5 个答案:

答案 0 :(得分:1)

在填充数据之前创建一个默认值为false的布尔数据列。 (一个 默认值是创建DataRow时自动分配给列的值

DataTable dt = con.QueryEx();
var column = new DataColumn("BoolProperty", typeof(bool));
column.DefaultValue = false;
dt.Columns.Add(column);
con.da.Fill(dt);

<小时/> 线

DataRow dr = dt.NewRow();
dr["BoolProperty"] = false;

基本没用。 dr是一个新的空行,不会添加到表中,也不会更改其他行中的标记

答案 1 :(得分:1)

试试这个

dt.Columns.Add(new DataColumn("BoolProperty", typeof(bool)));
for (int i=0;i<dt.Rows.Count;i++)
{
  dt.Rows[i]["BoolProperty"] = "Split";
}

答案 2 :(得分:1)

因此,DataTable dt已经使用con.da.Fill(dt);从数据库填充了一些值,并且您要向此填充表添加新列。如果您需要为此列添加值意味着您必须执行以下操作:

// Your code
dt.Columns.Add(new DataColumn("BoolProperty", typeof(bool)));
foreach(DataRow dr in dt.Rows)
{
    dr["BoolProperty"] = false;
}

或者只是在填充数据表的查询中包含false as BoolProperty,这将在所有获取的行中的DataTable中添加最后一列,并带有false

答案 3 :(得分:0)

此处的大部分答案都会在行中循环以设置默认值,但也可以使用Columns.Add覆盖expression

的覆盖来内联完成

例如,要将所有行设置为布尔值true:

dt.Columns.Add(new DataColumn("BoolProperty", typeof(bool), "price > 50"));

您还可以使用表达式参数根据行中的其他值设置列值,这可能类似于

#include "server.cpp"

值得注意的是,添加像这样的基于表达式的列也使列成为只读,因为它不打算根据(例如)用户输入进行更改。

答案 4 :(得分:0)

使用:

DataTable.Columns.Add(new DataColumn("Column Name", typeof(bool), true.ToString())

DataColumn具有如上所述的构造函数重载。在这里,它接受第三个参数作为该DataColumn的默认值。但是参数是字符串类型。因此,请确保将默认值强制转换为字符串。

P.S。我使用上述方法为我解决了同样的问题。