2010-07-09 43 views
0

代码如下:试图从Xml构建DataGridView。不工作

string fileName = "passfile.xml"; 
DataSet ds = new DataSet("Account List"); 
DataTable accounts = ds.Tables.Add("Accounts"); 

accounts.Columns.AddRange(new DataColumn[] { 
    new DataColumn("Username"), 
    new DataColumn("Password"), 
    new DataColumn("Description") 
); 

XmlDocument doc = new XmlDocument(); 
doc.Load(fileName); 

foreach (XmlNode node in doc.GetElementsByTagName(accountGroupsBox.SelectedItem.ToString())) 
{ 
    DataRow row = accounts.Rows.Add(
     node["Username"].InnerText, 
     node["Password"].InnerText, 
     node["Description"].InnerText); 
} 

dataGridView1.DataSource = accounts; 

我的XML文件是这样的:

嗯,我无法弄清楚如何正确逃生的XML,但有一个名为Account与元素AccountType,内部文本为Email AccountsWeb Accounts或类似的组合框中的项目。此外,还有其他子元素,如用户名,密码等

问题是当代码实际执行时,DataGridView填充正确的行和列,但其中什么都没有在他们......我做了什么错误?

回答

0

分配你的数据源后,你需要调用DataBind()。

dataGridView1.DataSource = accounts; 
dataGridView1.DataBind(); 

您还应该能够直接绑定到XML。像这样的东西...

DataSet ds = new DataSet(); 
ds.ReadXml("passfile.xml",XmlReadMode.InferSchema); 
dataGridView1.DataSource = ds; 
dataGridView1.DataBind(); 
+0

嗯,似乎没有工作。智能感知不能找到DataBind()方法。我正在使用Visual C#Express 2010的C#4.0。谷歌搜索带来了这个.... Bindingsource bSource = new BindingSource(); bSource.DataSource = ds; dataGridView1.DataSource = bSource; 我试过了,但仍然没有工作。我忘记了使用声明吗?我使用了错误的数据源吗? – Stev0 2010-07-09 16:21:30

+1

dataGridView1是什么类型的控件?如果它是一个GridView,它应该有一个DataBind()方法。 http://msdn.microsoft.com/en-us/library/fkx0cy6d.aspx。你不需要指定这是ASP.NET,SilverLight,Windows Forms还是WPF - 知道这会有所帮助。 – Jason 2010-07-09 19:59:02

+0

抱歉,延迟响应。这是一个Windows窗体应用程序,控件类型是dataGridView ....我只是将它从设计器中吸收到窗体中。它似乎没有DataBind()方法。 Intellisense显示一个DataBindings ....和一个DataBindingComplete。引用我的另一个问题....将做这个绑定使gridview自动更新时,节点被添加到XML文件? – Stev0 2010-07-11 02:58:00