我在winform上有两个datagridviews。第一个包含ID列。我想在该datagridview中选择一行,并根据该ID进行第二次dgv更新。第二个dgv绑定到XML,默认加载名为" Product"的所有节点。 XML看起来像这样:
<Class1>
<Product .... />
<Product .... />
</Class1>
<Class2>
<Product .... />
<Product .... />
</Class2>
第二个dgv正确加载名为Product的所有节点,所有节点都在所有Classx节点中。我在第一个datagridview上设置了事件,可以捕获ID并缩小结果集范围。如果我点击行ID&#34; 1&#34;在第一个dgv中,我需要第二个dgv来加载&#34; Class1中的产品。&#34;这不起作用:
private void dgClasses_CellClick(object sender, DataGridViewCellEventArgs e)
{
DataGridView dgv = sender as DataGridView;
if (dgv == null)
return;
if (dgv.CurrentRow.Selected)
{
string selectedval;
DataGridViewRow row = this.dgClasses.SelectedRows[0];
selectedval = row.Cells["ID"].Value.ToString();
XmlReader xmlFile = XmlReader.Create(txtFileLocation.Text, new XmlReaderSettings());
DataSet dataSet = new DataSet();
dataSet.ReadXml(xmlFile);
dgProducts.DataSource = null;
dgProducts.Refresh();
dgProducts.DataSource = dataSet.Tables["Class" + selectedval + "/Product"];
xmlFile.Close();
}
}
如何刷新第二个dgv以仅显示第一个dgv中选择的Class ID#中的产品?
更多信息: LINQ to XML的新手,但尝试了类似的东西但仍然没有数据。 &#34; Class是Product节点上的一个属性,如果它与selectedval(ID)匹配,那么我需要那些记录。
XDocument xml = XDocument.Load(txtFileLocation.Text);
var nodes = (from n in xml.Descendants("Class" + selectedval)
where n.Element("Product").Attribute("Class").Value == selectedval
select n.Element("Product").Descendants().Elements()).ToList();
dgProducts.DataSource = null;
dgProducts.Refresh();
dgProducts.DataSource = nodes;
答案 0 :(得分:0)
RowFilter效果很好!
private void dgClasses_CellClick(object sender, DataGridViewCellEventArgs e)
{
DataGridView dgv = sender as DataGridView;
if (dgv == null)
return;
if (dgv.CurrentRow.Selected)
{
string selectedval;
DataGridViewRow row = this.dgClasses.SelectedRows[0];
selectedval = row.Cells["ID"].Value.ToString();
XmlReader xmlFile = XmlReader.Create(txtFileLocation.Text, new XmlReaderSettings());
DataSet dataSet = new DataSet();
dataSet.ReadXml(xmlFile);
DataView dvClass = dataSet.Tables["Product"].DefaultView;
dvClass.RowFilter = "Class=" + "'" + selectedval + "'";
dgProducts.DataSource = dvClass;
xmlFile.Close();
}
}