點擊我有一個WinForm 2個datagridviews。第一個包含一個ID列。我想在該datagridview中選擇一行,並根據該ID選擇第二個dgv更新。第二個dgv綁定到XML,並默認加載名爲「Product」的所有節點。 XML如下所示:更新datagridview的另一個datagridview的
<Class1>
<Product .... />
<Product .... />
</Class1>
<Class2>
<Product .... />
<Product .... />
</Class2>
第二個dgv將所有名爲Product的節點都加載到所有Classx節點中。我在第一個datagridview上設置了事件,並可以捕獲該ID並縮小結果集。如果我點擊行ID「1」的第一DGV我還需要第二DGV加載只產品在「1類」。這是行不通的:
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選擇的類ID#?
更多信息: 新來的LINQ to XML,但嘗試這樣的事情,仍然沒有數據。 「類是產品節點上的屬性,如果它的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;
什麼**」它不工作」 **意味着什麼? – Vland 2014-08-27 18:52:19
爲什麼你使用'.Attribute(「Class」)。Value'?我沒有在你的xml定義中看到任何屬性 – Vland 2014-08-27 18:59:19
你認爲「它不工作」是什麼意思? 「沒有數據」在dgv。 – Blaze 2014-08-27 19:11:42