2013-10-06 37 views
1

我有這樣綁定XML真假DataGridViewCheckBoxColumn

<Alarms> 
    <Alarm> 
     <Repeat>False</Repeat> 
    </Alarm> 
    <Alarm> 
     <Repeat>True</Repeat> 
    </Alarm> 
</Alarms> 

XML文件試圖綁定使用下面的代碼在DataGridViewCheckBoxColumn這些布爾值。

var xdoc = XDocument.Load("Alarms.xml"); 
foreach (var x in xdoc.Root.Elements("Alarm")) 
{ 
    var repeat = x.Element("Repeat"); 
    bool repeat_v = repeat == null ? false : true; 
    if (date != null) 
     this.grid_SavedAlarms.Rows.Add(repeat_v); 
} 

它給出運行時異常而不終止程序。並不勾選複選框。哪一個是將布爾值轉換爲'repeat_v'的最佳方法?

+1

拋出的異常在哪裏?什麼是例外? –

+0

我認爲錯誤是你將布爾值作爲一行添加到網格中,無法將bool轉換爲DataGridRow,你必須實例化一個帶有布爾列的DataGridRow並將該列設置爲你的布爾值,並將該行添加到網格中。 – VahiD

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

回答

1

你必須一個一個DataGridViewRow添加到您的網格,而在這之前你解析XML值到您的布爾值

bool repeat_v = repeat == null ? false : bool.Parse(repeat.ToString()); 
if (date != null) 
    {  
     DataGridViewRow row = new DataGridViewRow(); 
     row.Cells.Add(new DataGridViewCheckBoxCell() {Value = repeat_v}); 
     this.grid_SavedAlarms.Rows.Add(row); 
    } 
0

我固定的問題我自己。問題是如果您使用repeat.Value,它會給我們TrueFalse而不是truefalse

這意味着c#布爾值是truefalse而不是TrueFalse。正確的代碼是

var repeat = x.Element("Repeat"); 
bool repeat_v = false; 
if (repeat != null) 
    repeat_v = repeat.Value == "True" ? true : false; 
if (date != null) 
    this.grid_SavedAlarms.Rows.Add(repeat_v);