将XML true或false绑定到DataGridViewCheckBoxColumn

时间:2013-10-06 06:18:52

标签: c# xml winforms

我有像这样的XML文件

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

尝试使用以下代码在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'的最佳方法?

2 个答案:

答案 0 :(得分: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);
  }

答案 1 :(得分: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);