在应用开发中常常用到这样的应用: DataGridView用来显示全体数据,还有由一些TextBox控件来提供修改功能。这里如果用挨个赋值的办法就不好了。.NET中提供的一个重要的技术就是——数据绑定。数据绑定中几个重要对象及属性有:Control.DataSource属性,BindingSource对象,Form.BindingContext属性。
这里通过一个例子来说明WinForm开发中如何使用数据绑定。首先有数据结构形如:(这里使用NorthWind的Sample数据。)
Customers和Orders数据是1:n的关系,Orders和OrdersDetails数据是1:n的关系。
因此设计Form如图,ListView绑定Custormers数据,入力控件绑定Customers里数据的其他字段。OrdersDataGridView绑定Orders数据,DetaiDataGridView绑定Order Details数据。
首先通过DataSet的DataRelation建立三表的关系:
PrivateSubQueryData()SubQueryData()
IfobjConnIsNothingThenReturn
objDataSet=NewDataSet("Data")
DimstrSqlAsString="select*fromcustomers"
DimobjDbAdapterAsOleDb.OleDbDataAdapter=NewOleDb.OleDbDataAdapter(strSql,objConn)
objDbAdapter.Fill(objDataSet,"Customers")
objDbAdapter.SelectCommand.CommandText="select*fromorders"
objDbAdapter.Fill(objDataSet,"Orders")
objDbAdapter.SelectCommand.CommandText="select*from[orderdetails]"
objDbAdapter.Fill(objDataSet,"OrderDetails")
objDataSet.Relations.Add("CustomerOrder",objDataSet.Tables("Customers").Columns("CustomerID"),objDataSet.Tables("Orders").Columns("CustomerID"))
objDataSet.Relations.Add("OrderDetail",objDataSet.Tables("Orders").Columns("OrderID"),objDataSet.Tables("OrderDetails").Columns("OrderID"))
EndSub
通过BindingSource绑定到DataGridView上,需要注意的是比较.NET 1.1的绑定,这里用BindingSource取代,在创建DataGridViewOrders的BindingSource对象的DataSource使用的是customBindingSource,而DataMember是Customers表和Orders表的DataRelation的名字——CustomerOrder。
orderBindingSource.DataSource = customBindingSource
orderBindingSource.DataMember = "CustomerOrder"
同理Detail的BindingSource对象的DataSource使用的是orderBindingSource,而DataMember是Orders表和Order Details表的DataRelation的名字——OrderDetail。
detailBindingSource.DataSource = orderBindingSource
detailBindingSource.DataMember = "OrderDetail"
PrivateSubBindData()SubBindData()
IfobjDataSetIsNothingThenReturn
DimcustomBindingSourceAsBindingSource=NewBindingSource
DimorderBindingSourceAsBindingSource=NewBindingSource
DimdetailBindingSourceAsBindingSource=NewBindingSource
customBindingSource.DataSource=objDataSet
customBindingSource.DataMember="Customers"
orderBindingSource.DataSource=customBindingSource
orderBindingSource.DataMember="CustomerOrder"
detailBindingSource.DataSource=orderBindingSource
detailBindingSource.DataMember="OrderDetail"
Me.lstCustom.DataSource=customBindingSource
Me.lstCustom.ValueMember="ContactName"
Me.lstCustom.DisplayMember="ContactName"
Me.DataGridView1.DataSource=orderBindingSource
Me.DataGridView2.DataSource=detailBindingSource
Me.DataGridView1.AutoResizeColumns()
Me.DataGridView2.AutoResizeColumns()
Me.txtName.DataBindings.Add("Text",customBindingSource,"ContactName")
Me.txtContactTitle.DataBindings.Add("Text",customBindingSource,"ContactTitle")
Me.txtAddress.DataBindings.Add("Text",customBindingSource,"Address")
Me.txtCity.DataBindings.Add("Text",customBindingSource,"City")
Me.txtRegion.DataBindings.Add("Text",customBindingSource,"Region")
Me.txtPostalCode.DataBindings.Add("Text",customBindingSource,"PostalCode")
Me.txtPhone.DataBindings.Add("Text",customBindingSource,"Phone")
Me.txtFax.DataBindings.Add("Text",customBindingSource,"Fax")
Me.txtCountry.DataBindings.Add("Text",customBindingSource,"Country")
EndSub
而浏览数据,可以通过BindingManagerBase的Position来控制:
PrivateSubbtnFirst_Click()SubbtnFirst_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnFirst.Click
'DimbindingAsBinding=Me.txtName.DataBindings("Text")
'DimmanagerAsBindingManagerBase=binding.BindingManagerBase
DimmanagerAsBindingManagerBase=Me.BindingContext(Me.lstCustom.DataSource)
manager.Position=0
EndSub
PrivateSubbtnPrev_Click()SubbtnPrev_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnPrev.Click
DimmanagerAsBindingManagerBase=Me.BindingContext(Me.lstCustom.DataSource)
Ifmanager.Position>0Then
manager.Position-=1
EndIf
EndSub
PrivateSubbtnNext_Click()SubbtnNext_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnNext.Click
DimmanagerAsBindingManagerBase=Me.BindingContext(Me.lstCustom.DataSource)
Ifmanager.Position<manager.Count-1Then
manager.Position+=1
EndIf
EndSub
PrivateSubbtnLast_Click()SubbtnLast_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnLast.Click
DimmanagerAsBindingManagerBase=Me.BindingContext(Me.lstCustom.DataSource)
manager.Position=manager.Count-1
EndSub
分享到:
相关推荐
① Error 图标表示的设定 ② 单元格入力值得验证 ③ 用户入力值发生错误时的捕获
取得或者修改当前单元格的内容 ② 设定单元格只读 ③ 不显示最下面的新行 ④ 判断新增行 ⑤ 行的用户删除操作的自定义 ⑥ 行、列的隐藏和删除 ⑦ 禁止列或者行的Resize . ⑧ 列宽和行高以及列头的高度...
.net 2.0 图表控件WinForm WebForm通用,需要的可以下载回去看看
winform皮肤控件,支持.net framework 2.0,使用方法附在压缩包里的文档中。
1.1 ASP.NET 2.0 是什么 1 1.2 第一个ASP.NET 2.0网站 2 1.2.1 创建网站 2 1.2.2 设计网站 3 1.2.3 通过预编译发布网站 5 1.3 ASP.NET 2.0必须具备的HTML知识 7 1.3.1 利用表单提交数据 8 1.3.2 使用表格进行布局 9 ...
C#-WinForm(2种dataGridView导出Excel)批量导出,高效率,36列万行,15秒
cefglue vs2010 .net2.0整合版,C#于JS交互,可以播放MP4的cef版本。
DockPanel 3.0.4.0 支持.net 2.0 魔改版 支持winform wpf,包括vs2012 -vs2015 等多套皮肤(根据18年5月份github 上面版本修改)
《精通.NET 2.0 C# Windows窗体和自定义控件》 英文版PDF 文件太大,源码分开发布
Apress - Pro .NET 2.0 Windows Forms and Custom Controls in C# (Dec 2005) C#自定义控件,GDI,线程.......winform编程经典书籍,附有源代码
//设置列表头 foreach (DataGridViewColumn headerCell in dataGridView1.Columns) { dt.Columns.Add(headerCell.HeaderText); } foreach (DataGridViewRow item in dataGridView1.Rows) { dr = dt.NewRow(); for ...
.net-winform客户端调用浏览器打开网页源码.多种用途。
微软.Net2.0企业库的WebForm和WinForm的配置方法.zip
.NET WinForm-复习题 .
在.net编程中,我们经常用到config文件来保存一些常用的应用程序配置信息,在WinForm中这个文件名字是app.config,在asp.net中叫web.config。这个.config文件其实就是一个xml文件,对它的读操作微软已经提供了一个类...
仿QQ概念版登陆界面,酷狗魔方,C# winForm .Net 2.0 界面特效 源码。 可以把Winform设计成像WPF一样。 仿QQ概念版登陆界面:云和叶子是动态的。启动和关闭有仿照QQ的渐变透明的动态效果。 酷狗魔方:4个角有淡入...
文件下载源代码 C#.net2.0 压缩文件夹,速度快,好用
适用于:.net2.0+ Winform项目 背景: 有时候我们需要开一个简单的窗口来做一些事,例如输入一些东西、点选一个item之类的,可能像这样: 完了返回原窗体并获取刚刚的输入,这样做并没有什么问题,但在几天前我突然...