【问题标题】:Update datagridview from row click on another datagridview从行更新datagridview单击另一个datagridview
【发布时间】:2014-08-27 17:04:58
【问题描述】:

我在一个 winform 上有两个 datagridviews。第一个包含一个 ID 列。我想在该 datagridview 中选择一行并根据该 ID 进行第二次 dgv 更新。第二个 dgv 绑定到 XML,默认加载所有名为“Product”的节点。 XML 如下所示:

<Class1>
  <Product .... />
  <Product .... />
</Class1>
<Class2>
  <Product .... />
  <Product .... />
</Class2>

第二个 dgv 正确加载了所有名为 Product 的节点,所有节点都在所有 Classx 节点内。我在第一个 datagridview 上设置了事件,并且可以捕获 ID 并缩小结果集。如果我单击第一个 dgv 中的行 ID“1”,我需要第二个 dgv 来仅加载“Class1”中的产品。这不起作用:

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 的新手,但尝试了类似的方法,但仍然没有数据。 "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;

【问题讨论】:

  • “它不起作用”是什么意思?
  • 你为什么使用.Attribute("Class").Value?我在您的 xml 定义中没有看到任何属性
  • 您认为“它不起作用”是什么意思?阅读问题,它在 dgv 中显示“没有数据”。
  • 很高兴你把它整理出来,我还是不明白问题是什么,你是怎么解决的,为什么这个问题叫做“从行点击另一个数据网格视图更新数据网格视图”
  • 因为这是我试图解决的问题。根据不同 dgv 的行点击更新 dgv。我通过过滤掉不符合特定行的单击事件传递的条件的行来解决它,最初我试图只在数据绑定中返回该行集,但这是行不通的。

标签: c# winforms datagridview


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多