提问关于将DataGrid与多个表中的数据进行绑定?

Mr.Osc 2004-05-10 03:37:29
有两个主表comm_table与从表ent_table通过ent_no字段相联,建立两个与源表对应的DataTable并用DbAdapter填充(Fill)成功,同时也用DataRelation关联。

现在需要在一个DataGrid中同时显示两个表中的数据字段,应该采用什么样的方法?

因为我刚接触C#,只想到可以在数据库中建视图,然后再新建一个与数据库视图相对应的DataTable;再或者在映射数据的时候新建立一个可以把两个数据表数据join到一起的DataView。因为初学,思路比较窄,还请各位高手指教。
...全文
105 32 打赏 收藏 举报
写回复
32 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
qij2256 2004-06-20
1
  • 打赏
  • 举报
回复
Mr.Osc 2004-05-12
to BlueLevin(蔚蓝闪电):
你想回答什么问题?
  • 打赏
  • 举报
回复
BlueLevin 2004-05-12
SqlConnection cn=new SqlConnection("数据库链接字符串");
SqlCommand cmd=new SqlCommand("查询字符串",cn);
SqlDataAdapter da=new SqlDataAdapter(cmd);
DataSet ds=new DataSet();
da.Fill(ds);
dataGrid1.DataSource=ds;
这就完了,如果你要用视图的话如下:

DataView dv=new DataView(ds.Tables[0].DefaultView);
dataGrid1.DataSource=dv;
  • 打赏
  • 举报
回复
Mr.Osc 2004-05-12
to gcgdru(地球人):
我查了一下,仍然查不出你说的第二种方法如何实现。
  • 打赏
  • 举报
回复
Mr.Osc 2004-05-12
to orswanic():
太感谢了,你的资料正是我希望的解决方法,在数据映射的时候没有添加额外的数据集。但例子中扩展的DataGridColumnStyle是只读的,不过我想更新问题是可以通过修改代码解决的,结帖了……
  • 打赏
  • 举报
回复
orswanic 2004-05-12
这个问题,以上说的可以称之为解决方法,但我感觉思考的方向好象有偏差,为什么不可以在表现层下功夫呢?
我查了一下资料,觉得这个应该是楼主想要的:
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q319076
  • 打赏
  • 举报
回复
firstshui 2004-05-11
关注~
  • 打赏
  • 举报
回复
firstshui 2004-05-11
关注中……
  • 打赏
  • 举报
回复
Mr.Osc 2004-05-11
to gcgdru(地球人):
Windows application形式。
  • 打赏
  • 举报
回复
NEO 2004-05-11
不知你是在windows程序里用呢,还是web(asp.net)中应用呢
  • 打赏
  • 举报
回复
Mr.Osc 2004-05-11
to orswanic():
非常感谢参与此帖,再讨论一轮再给分。

to gcgdru(地球人):
显示风格的问题是有一定的原因造成的,但这里不是讨论重点。
你说的第一种方法在dataGrid.AllowNavigation = true的情况下可以在一个DataGrid中显示主从表数据,但从表的显示标题还有显示的列难于定制(可能是因为我对DataGrid的使用还不是很了解),所以不想采用;再有,如果一个表通过多个关系和多个表关联,那么显示的结果更加杂乱。
第二种方法我觉得和其他几位高手的方法不同,可能是另一种类型的解决方法,烦劳你说得具体一点或是贴出一些示例代码便于讨论。
非常感谢!
  • 打赏
  • 举报
回复
orswanic 2004-05-11
我个人觉得sz_Carol()的方法是可以解决问题的。
在进行表映射的时候我比较倾向于使用DataViewManager,在不存在同一个DataTable对应多个视图的情况下比较便于管理。
按照sz_Carol()的方法,如果对主从表的数据存在更新的需求,那么当你使用JOIN的SQL语句生成一个DataTable之后,UpdataCommand之类的CommandText是需要自己手动编写的,SQL语言的UPDATE和INSERT语句不象SELECT处理主从表那么灵活,虽然可以通过存储过程解决,但我通常会在开始的时候就在数据库中建立视图,DataTable的数据直接从数据库视图中SELECT,这样更新插入什么的CommandText更易于编写。

给你一个FAQ的链接,在处理DataGrid的其他问题时会有一些参考
http://www.syncfusion.com/FAQ/WinForms/default.asp#44
  • 打赏
  • 举报
回复
NEO 2004-05-11
不清楚你这样显示有什么用途,不过实现起来方法还是有一些的。
1. 用sql语句将表连接,然后fill到一个dataset里,然后,datagrid.datasource=dataset.
2. 先将从表中的数据显示到datagrid中,然后在datagrid绑定数据时根据从表ent_no,将主表表中数据显示出来;
虽然还有一些方法,但我个人觉得这两种方式比较容易理解.不过真正应用起来你的这种显示方式应该不会很多,一般应该是先显示主表的数据,需要看明细数据时在根据所选的主表数据从数据库中再查从表数据
  • 打赏
  • 举报
回复
Mr.Osc 2004-05-10
自己再UP一次吧,希望这个帖子还能让我再学到一些东西。
  • 打赏
  • 举报
回复
Mr.Osc 2004-05-10
to wangsaokui(无间道II(前传)),sz_Carol():
那个帖子的分已经送了,希望继续关注本帖,谢谢!
  • 打赏
  • 举报
回复
Mr.Osc 2004-05-10
to sz_Carol():
非常感谢你的参与,我觉得你的方法是可以解决问题的,但是好象在有些情况下比较麻烦。我查了一下论坛以往的帖子,这方面的讨论没有太深入的,我想看看大家继续讨论的结果再结帖,所以开了个帖子先给你送点分:
http://expert.csdn.net/Expert/topic/3050/3050966.xml?temp=.8670313
你去领一下吧,再次感谢。
  • 打赏
  • 举报
回复
sz_Carol 2004-05-10
界面上数据发生变化的时候,响应DataTable.RowChanged事件(这里的DataTable指的是A_B_Join),在事件处理函数中去同步A和B.
  • 打赏
  • 举报
回复
sz_Carol 2004-05-10
我处理的多为数据只读的情况。如果数据需要维护,有两个办法:
1、只加载Join的结果,绑定Join的结果;这样数据回写的时候稍微麻烦一些;
2、还是加载三个表:A、B、A_B_Join,绑定A_B_Join,界面上数据发生修改的时候,去同步A或者B。这样数据回写的时候,由于A、B直接反映了数据库的原型,所以很容易。
  • 打赏
  • 举报
回复
Mr.Osc 2004-05-10
最近我这里访问CSDN时行时不行,也不知道怎么了。。。
等着高手们发表看法啊。。。
  • 打赏
  • 举报
回复
Mr.Osc 2004-05-10
to stdotleo(大雨仔):嗯……不好意思,你能说得再具体一点er么?
sz_Carol()的方法我用过,但是有一个问题就是不能很好的保证数据集中DataTable数据的同步。我现在就是想知道有没有根本解决这个问题的方法,比如从控件和数据组件绑定的设计入手的方法。
假设dataTableA对应数据库表"A_table",dataTableB对应数据库表"B_table",而dataTableJoin是SELECT * FROM A_table JOIN B_table。
controlA->dataTableA->A_table的修改并不能反应在dataTableJoin中也不能反应到controlJoin中了。
  • 打赏
  • 举报
回复
加载更多回复(12)
相关推荐
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2004-05-10 03:37
社区公告

让您成为最强悍的C#开发者