当另一个 Grid Cell 值更改时,一次更改 DataGridView 多个单元格值
Change DataGridView Multiple cells value at once when another Grid Cell value Changed
我在 C# Winforms 应用程序的两个不同选项卡中有两个 DataGridView
控件,Visual Studio 2019。
第一个网格包含 Itemname 和 Price 如下
ITEMNAME PRICE
---------------------
MOUSE 399.00
PRINTER 12000.00
MONITOR 18500.00
在另一个网格中,我将这些项目 issued/sold 显示给不同的客户,如下所示
CUSTOMERNAME ITEMNAME PRICE
-----------------------------------------
ANANT H MOUSE 399.00
JOLLY K MONITOR 18500.00
ANANT H MOUSE 399.00
KIRAN A PRINTER 12000.00
KIRAN A MOUSE 399.00
当第一个网格中的任何项目的价格更新时,我希望在第二个网格中反映匹配 itemname.For 例如,如果鼠标价格更改为 500.00,它应该立即反映在所有 3第二个网格的 PRICE 列的单元格,其中 ITEMNAME 匹配。
这样做的明显选择是 运行 for 循环并与 ITEMNAME 匹配并获取 PRICE 单元格以编辑值。但是当第二个网格中有大量记录时,这对我来说看起来既繁重又耗时。
当第一个网格中的价格发生变化时,我是否可以立即更改匹配 ITEMNAME 的 PRICE 值的所有值?
就像我们在 EXCEL 中所做的那样,如果单元格引用单个主单元格,当我们更改主单元格价格值时,所有引用的单元格值都会立即自动更改。
好的,所以我们可以用数据关系来做到这一点:
- 向您的项目添加一个 DataSet 类型的新文件(或者如果您已经有一个,则在现有的项目中进行)。打开数据集文件以查看空白设计图面(或现有 tables)
- 右键单击新数据 table,放置一个名为 Products 的 table,包含 ProductId、ItemName 和 Price 列,以及合理的数据类型(int、string、float)
- 添加一个新的 table 名称,我不知道,引号之类的
- 在引号中放置 CustomerName、ProductId 的列
- 单击 Products table 中 ProductId 的灰色行 header 使行变为蓝色,然后单击拖放引号 table 的 ProductId - 创建数据关系 window 出现,检查 Products 是 parent table 并且 Quotes 是 child table (我总是忘记拖到哪个方向) - 在组合中交换如果错误,则顶部或以另一种方式重做拖动
- 到 Quotes table 添加另一列 ProductPrice,键入 float 并将其 Expression 属性 设置为
Parent.Price
- 切换到新的表单设计器(现在,只是为了演示)并打开数据源 window(查看菜单.. 其他 Windows)。希望你没有使用 net core.. 将产品和报价节点从数据源中拖到表单中(有两个报价节点,一个是 child 产品。拖动顶级节点是因为你不此演示不需要相关的绑定行为
运行 app,把一些产品放进去,然后把报价放进去,然后改价格。它应该会自动更新引用
我在 C# Winforms 应用程序的两个不同选项卡中有两个 DataGridView
控件,Visual Studio 2019。
第一个网格包含 Itemname 和 Price 如下
ITEMNAME PRICE
---------------------
MOUSE 399.00
PRINTER 12000.00
MONITOR 18500.00
在另一个网格中,我将这些项目 issued/sold 显示给不同的客户,如下所示
CUSTOMERNAME ITEMNAME PRICE
-----------------------------------------
ANANT H MOUSE 399.00
JOLLY K MONITOR 18500.00
ANANT H MOUSE 399.00
KIRAN A PRINTER 12000.00
KIRAN A MOUSE 399.00
当第一个网格中的任何项目的价格更新时,我希望在第二个网格中反映匹配 itemname.For 例如,如果鼠标价格更改为 500.00,它应该立即反映在所有 3第二个网格的 PRICE 列的单元格,其中 ITEMNAME 匹配。
这样做的明显选择是 运行 for 循环并与 ITEMNAME 匹配并获取 PRICE 单元格以编辑值。但是当第二个网格中有大量记录时,这对我来说看起来既繁重又耗时。
当第一个网格中的价格发生变化时,我是否可以立即更改匹配 ITEMNAME 的 PRICE 值的所有值?
就像我们在 EXCEL 中所做的那样,如果单元格引用单个主单元格,当我们更改主单元格价格值时,所有引用的单元格值都会立即自动更改。
好的,所以我们可以用数据关系来做到这一点:
- 向您的项目添加一个 DataSet 类型的新文件(或者如果您已经有一个,则在现有的项目中进行)。打开数据集文件以查看空白设计图面(或现有 tables)
- 右键单击新数据 table,放置一个名为 Products 的 table,包含 ProductId、ItemName 和 Price 列,以及合理的数据类型(int、string、float)
- 添加一个新的 table 名称,我不知道,引号之类的
- 在引号中放置 CustomerName、ProductId 的列
- 单击 Products table 中 ProductId 的灰色行 header 使行变为蓝色,然后单击拖放引号 table 的 ProductId - 创建数据关系 window 出现,检查 Products 是 parent table 并且 Quotes 是 child table (我总是忘记拖到哪个方向) - 在组合中交换如果错误,则顶部或以另一种方式重做拖动
- 到 Quotes table 添加另一列 ProductPrice,键入 float 并将其 Expression 属性 设置为
Parent.Price
- 切换到新的表单设计器(现在,只是为了演示)并打开数据源 window(查看菜单.. 其他 Windows)。希望你没有使用 net core.. 将产品和报价节点从数据源中拖到表单中(有两个报价节点,一个是 child 产品。拖动顶级节点是因为你不此演示不需要相关的绑定行为
运行 app,把一些产品放进去,然后把报价放进去,然后改价格。它应该会自动更新引用