使用DataSource在DataGridView中显示XML数据

时间:2009-11-06 11:14:20

标签: c# winforms datagridview

我有一个带有DataGridView的表单,我想使用DataSet将XML文件中的数据加载到Grid中。我创建一个DataSet,将XML加载到DataSet中,然后将DataSet分配给Grid的DataSource属性:

private void formAccountHistory_Load(object sender, EventArgs e)
{
    // Load the DataSet that represents the offline version of the database.
    AccountHistoryDS = new DataSet("TicketAccountHistory");

    AccountHistoryDS.ReadXmlSchema("TicketsAccountHistory.xsd");
    AccountHistoryDS.ReadXml("TicketsAccountHistory.xml", XmlReadMode.Auto);
    AccountHistoryDS.Locale = System.Globalization.CultureInfo.CurrentUICulture;

    dataGridViewStatement.AutoGenerateColumns = false;
    dataGridViewStatement.DataSource = AccountHistoryDS;
    dataGridViewStatement.DataMember = "Line";
}

但是数据不会显示在网格中。我在XML文件中有8行,Grid创建了8行,但它们都是空白的。当我调试代码时,我可以看到DataSet中的数据,所以它似乎正确加载到那一点,只是没有在Grid中显示它。我使用的XML文件如下所示 - 它已经很好地构建并根据其模式进行验证:

<?xml version="1.0" standalone="yes"?>
<TicketsAccountHistory>
    <Line>
        <colID>03/09</colID>
        <colStartEnd>14/01/2009-20/01/2009</colStartEnd>
        <colDate>14/01/2009</colDate>
        <colType>Period 03/09 - opening balance</colType>
        <colDR></colDR>
        <colCR></colCR>
        <colBalance>0.00</colBalance>
    </Line>
    <Line>
        <colID>03/09</colID>
        <colStartEnd>14/01/2009-20/01/2009</colStartEnd>
        <colDate>20/01/2009</colDate>
        <colType>Sales Invoice (Ref: MRO-S-03/09)</colType>
        <colDR>1000</colDR>
        <colCR></colCR>
        <colBalance>1000.00</colBalance>
    </Line>
    <Line>
        <colID>03/09</colID>
        <colStartEnd>14/01/2009-20/01/2009</colStartEnd>
        <colDate>20/01/2009</colDate>
        <colType>Commission Invoice (Ref: MRO-C-03/09)</colType>
        <colDR></colDR>
        <colCR>100.00</colCR>
        <colBalance>900.00</colBalance>
    </Line>
    <!-- 5 more rows similar to this -->
</TicketsAccountHistory>

谁能告诉我自己可能做错了什么?我是.NET 3.5和DataGridView的新手,我不知道在填充网格时如何触发哪些事件,如果在任何这些事件中都应该有代码等等。任何帮助都会受到赞赏。

干杯, 夏兰。

3 个答案:

答案 0 :(得分:5)

你有声明:

 dataGridViewStatement.AutoGenerateColumns = false;

这意味着DataGridView将没有任何列。将其设置为true或插入一​​些代码以添加列。

答案 1 :(得分:1)

手动生成列并将它们命名为与XML字段相同时,请尝试以下操作:

    For Each col As DataGridViewColumn In dataGridViewStatement.Columns
        col.DataPropertyName = col.Name
    Next

答案 2 :(得分:0)

当您手动编辑网格中的列时,可以将ColumnName设置为所需的任何名称,但是要设置的重要字段是DataPropertyName,该属性必须与XML中的元素名称匹配。 为了方便起见,我通常将它们都设置为与XML元素名称相同。