2014-08-27 77 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