关于c#中两个DataGrid绑定到主表和子表的数据同步问题

datagrid|数据|数据同步|问题

在数据库编程中,我们常常要将主表和子表分别绑定到两个DataGrid,同时还有一些TextBox之类的
控件要显示相应DataGrid中的数据,这时候数据的同步就成了一个问题。这个问题的解决方法就是
使用BindingManagerBase来管理数据了。在DataSet中的两个表之间添加关系
private void CreateRelation(Dataset ds,string relationname,string MasterTableName,string SlaveTableName,string ColumnName)//
{
ds.Tables[MasterTableName].ChildRelations.Add(relationname,ds.Tables
MasterTableName].Columns [ColumnName],ds.Tables[SlaveTableName].Columns[ColumnName]);
}
这样就给主表MasterTable添加了一个子关系(ChildRelation)。
建立两个BindingManagerBase:
BindingManagerBase bmMaster=MasterGrid.BindingContext[ds,”MasterTableName”];
BindingManagerBase bmSlave=
SlaveGrid.BindingContext[ds,”MasterTableName.relationname”];
建立好BindingManagerBase之后,指定DataGrid的DataSource(最好是用SetDataBinding来进行绑定,指明DataMember。如果你用DataGrid.DataSource=ds.Tables[”TableName”]的话,对于子表对应的BindingManagerBase就起不了作用了,我也不知道是什么原因。应该是SlaveGrid.BindingContext[ds,”MasterTableName.relationname”]的问题吧)
MasterGrid.SetDataBinding(ds,”MasterTableName”);
SlaveGrid.SetDataBinding(ds,”SlaveTableName”);
这时候MasterGrid跟SlaveGrid已经对应起来了。
再绑定SlaveGrid对应的TextBox(比如说对应于Name列)
TextBoxName.DataBindings.Add(”Text”,ds,”MasterTableName.relationname.Name”);
注意带下划线的部分,不是用Add(”Text”,ds.Tables[SlaveTablename],”Name”)
也就是说,建立DataBindingManager,绑定数据到DataSet及TextBox时都是以相应的relation作为DataMember的,而不是用只指定DataSource的方法来进行的。

时间: 2024-12-23 04:09:24

关于c#中两个DataGrid绑定到主表和子表的数据同步问题的相关文章

主表和子表数据同时在绑定控件显示

控件|数据|显示 (一).显示效果图 (二)代码    1.前台界面代码: <%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="数据绑定控件同时显示主表和子表数据.WebForm1" %><%@ Import Namespace="System.Data" %>&

为什么一个datatable中两次使用 car.Rows.Add(newRow);发现添加的数据不在同一行。

问题描述 car.Columns.Add("线路名称",typeof(System.String));//car.Columns.Add("线路宽度",Type.GetType("System.String"));car.Columns.Add("序号(必填)",Type.GetType("System.String"));car.Columns.Add("纬度",typeof(Syst

mysql 触发器实现两个表的数据同步_Mysql

mysql通过触发器实现两个表的同步 目前,在本地测试成功. 假设本地的两个数据库a和b,a下有表table1(id, val) b下有表table2(id, val) 假设希望当table1中数据更新,table2中数据同步更新. 代码: DELIMITER $$ CREATE /*[DEFINER = { user | CURRENT_USER }]*/ TRIGGER `a`.`触发器名` BEFORE UPDATE ON `a`.`table1` FOR EACH ROW BEGIN I

PHP中使用php://input处理相同name值的表单数据_php技巧

在去年10月份,我在博客中分析了php接收前台name值相同的表单提交数据的处理的问题,当时说的方案是为把name值改成数组类型,php接收到之后,再对数组进行合并处理.这样做的缺点就是不完全兼容前台表单,用户必须要对表单作出更改,而系统需求是所有升级对用户完全透明,所以说这种方式还是不够完美. 经过差不多一年时间的沉淀,发现php提供原始的访问输入/输出流的方法,POST的数据可以通过php://input来获取: 复制代码 代码如下: php://input 是个可以访问请求的原始数据的只读

struts,form表单中数据无法传递到actionForm中,而且request.getParameter也取不到表单中数据

问题描述 1.struts-config中的配置<form-beanname="provideForm"type="form.ProvideForm"/><actionpath="/assistProvide"name="provideForm"type="action.AssistProviderAction"parameter="method"scope="

急得吐血,一个很简单的数据同步问题,用两个Gridview,第二个Gridview怎么都不显示,用一个textbox和一个Gridview就没问题?

问题描述 完全晕倒.用两个Gridview练习父表和子表的数据同步,第二个Gridview怎样都不显示数据.用一个textbox和一个Gridview,就没问题,操作上应该没什么问题.使用的是winxpsp2,vs2005环境.一通宵,现在快天亮了,网上搜了好久还是没弄明白,在线等等看,高手帮帮忙. 解决方案 解决方案二:说清楚些吧,不明白解决方案三:我使用两张表,第一个GridView连接一张表,第二个GridView连接另一张表,两张表有一个公共字段.我打算达到这样的目的,当我选择第一个Gr

数据库中两张表之间的数据同步增加、删除与更新实现思路_MsSql

分别创建增加.删除.更新的触发器(Trigger)来达到两张表之间数据同步的目的. 1:数据同步增加: 如有两张表--A表和B表,创建触发器使当A表插入数据后B表也同步插入数据.其中B表插入数据的字段需要同A表中的字段相对应. 复制代码 代码如下: CREATE TRIGGER 触发器名称 ON A表 AFTER INSERT AS BEGIN INSERT INTO B表(B表字段1,B表字段2,B表字段3) SELECT A表字段1,A表字段2,A表字段3 FROM INSERTED END

WPF中DataGrid绑定Combox如何实现数据动态刷新

问题描述 最近才开始学WPF,用到DataGrid来显示数据,并想通过DataGrid绑定Combox来实现数据交互,最后实现两个Combox进行联动.没想到怎么搞都没能让Combox里面的数据刷新,查了好久都没能解决,希望各位大神帮忙,最后能给出个DEMO!!! 解决方案 解决方案二:在第一个Combobox中的selectionChanged事件中更新另一个的ItemsSource就行了.解决方案三:引用1楼duanzi_peng的回复: 在第一个Combobox中的selectionCha

可视化Swing中JTable控件绑定SQL数据源的两种方法深入解析

以下是对可视化Swing中JTable控件绑定SQL数据源的两种方法进行了详细的分析介绍,需要的朋友可以过来参考一下   在 MyEclipse 的可视化 Swing 中,有 JTable 控件. JTable 用来显示和编辑常规二维单元表. 那么,如何将 数据库SQL中的数据绑定至JTable中呢? 在这里,提供两种方法.JTable的构造方法通过查阅Java的API,可以可以得到JTable的两个重要的构造方法:JTable(Object[][] rowData, Object[] colu