2013-10-06 35 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);