2014-08-27 106 views
-1

點擊我有一個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; 
+0

什麼**」它不工作」 **意味着什麼? – Vland 2014-08-27 18:52:19

+0

爲什麼你使用'.Attribute(「Class」)。Value'?我沒有在你的xml定義中看到任何屬性 – Vland 2014-08-27 18:59:19

+0

你認爲「它不工作」是什麼意思? 「沒有數據」在dgv。 – Blaze 2014-08-27 19:11:42

回答

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(); 
     } 
    } 
+0

問題和解決辦法不能更清楚。 – Blaze 2014-08-27 19:12:15