我尝试在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("Грешка във връзката.", "Грешка");
}
但我需要取消选中此列。
答案 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。我使用上述方法为我解决了同样的问题。