2017-08-17 47 views
-2

我嘗試在數據表中添加列:添加布爾列DataTable中值爲

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

並嘗試設置值 - 假:

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("Грешка във връзката.", "Грешка"); 
} 

這是發生了什麼: :)

,但我需要此列中取消選中。

+1

拋出什麼異常? –

+0

刪除try catch(或實際顯示catch中的錯誤),以便您可以看到發生了什麼問題 – EpicKip

+0

未選中chekbox的datagrid中的列。 –

回答

1

在填充數據之前創建一個默認值爲false的布爾dataColumn。 (A 默認值是創建一個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

使用試試這個

dt.Columns.Add(new DataColumn("BoolProperty", typeof(bool))); 
for (int i=0;i<dt.Rows.Count;i++) 
{ 
    dt.Rows[i]["BoolProperty"] = "Split"; 
} 
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在查詢中填充的數據表,將在數據表中的所有提取的行添加最後一列用假

相關問題