数据绑定控件(ASP.NET 2.0中实现模板中的数据绑定)

本文目录
- ASP.NET 2.0中实现模板中的数据绑定
- VB.NET中层次数据绑定TreeView的实现
- 使用数据绑定控件和ADO对象编程添加新纪录有什么不同
- 数据源控件和数据绑定控件的区别
- 绑定型控件未绑定型控件和计算机控件分别在什么情况下使用
- 将数据绑定控件绑定到数据环境中有几种方式如何实现
- 什么叫数据绑定控件什么叫数据绑定
- 什么是数据绑定型控件与非绑定型控件它们使用时要注意什么
ASP.NET 2.0中实现模板中的数据绑定
模板化的数据绑定控件为我们在页面上显示数据提供了根本的灵活性 你可能还记得ASP NET v x中的几个模板化控件(例如DataList和Repeater控件) ASP NET 仍然支持这些控件 但在模板中绑定数据的语法已经被简化和改善了 本文将讨论在数据绑定控件模板中绑定数据的多种方法 数据绑定表达式 ASP NET 改善了模板中的数据绑定操作 把v x中的数据绑定语法DataBinder Eval(Container DataItem fieldname)简化为Eval(fieldname) Eval方法与DataBinder Eval一样可以接受一个可选的格式化字符串参数 缩短的Eval语法与DataBinder Eval的不同点在于 Eval会根据最近的容器对象(例如DataListItem)的DataItem属性来自动地解析字段 而DataBinder Eval需要使用参数来指定容器 由于这个原因 Eval只能在数据绑定控件的模板中使用 而不能用于Page(页面)层 当然 ASP NET 页面中仍然支持DataBinder Eval 你可以在不支持简化的Eval语法的环境中使用它 下面的例子演示了如何使用新的简化的Eval数据绑定语法绑定到DataList数据项模板(ItemTemplate)中的Image Label和HyperLink控件 <asp:DataList ID= DataList RepeatColumns= Width= runat= server DataSourceID= ObjectDataSource > <ItemTemplate> <asp:HyperLink ID= HyperLink runat= server NavigateUrl= <%# Eval( PhotoID PhotoFormViewPlain aspx?ID={ } ) %> > <asp:Image ID= Image Runat= server ImageUrl= <%# Eval( FileName images/thumbs/{ } ) %> /></asp:HyperLink> <asp:Label ID= CaptionLabel runat= server Text= <%# Eval( Caption ) %> /> </ItemTemplate></asp:DataList><br /><asp:ObjectDataSource ID= ObjectDataSource runat= server TypeName= DataComponentTableAdapters PhotosTableAdapter SelectMethod= GetPhotosForAlbum > 数据绑定也可以作为控件的主题定义(theme definition)的一部分 这样我们就可以通过改变主题来随意地改变模板化控件的布局和外观 但是Theme(主题)模板中只能使用Eval(或者后面讨论的Bind) 绑定到任意的用户代码是被禁止的 FormView控件 DataList控件在来自数据源的数据项中进行迭代操作 并为每个数据项输出ItemTemplate(数据项模板) 这对于显示数据项列表是有用的 但是通常情况下 你希望在一个窗体中实现单条数据项的绑定操作 为了实现这个目的 ASP NET 引入了FormView控件 它能够在任意的模板中每次显示一个数据项 DetailsView和FormView之间的主要差异在于 DetailsView拥有内建的表格显示方式 而FormView需要使用用户自定义的显示模板 在其它方面FormView和DetailsView对象模型是非常相似的 下面的例子显示了一个绑定到ObjectDataSource的FormView控件 该FormView的ItemTemplate属性包含数据绑定的Image Label和HyperLink控件 与前面的DataList示例类似 <asp:FormView ID= FormView runat= server DataSourceID= ObjectDataSource > <ItemTemplate> <asp:Label ID= CaptionLabel runat= server Text= <%# Eval( Caption ) %> Font Size= pt /><br /> <asp:Image ID= Image runat= server ImageUrl= <%# Eval( FileName images/{ } ) %> /> <asp:HyperLink ID= HyperLink Text= Back to Album NavigateUrl= <%# Eval( AlbumID PhotosDataList aspx?ID={ } ) %> runat= server /> </ItemTemplate></asp:FormView><asp:ObjectDataSource ID= ObjectDataSource runat= server TypeName= DataComponentTableAdapters PhotosTableAdapter SelectMethod= GetPhoto > <SelectParameters><asp:QueryStringParameter Name= PhotoID DefaultValue= QueryStringField= ID /></SelectParameters></asp:ObjectDataSource> FormView与DetailsView类似 也跟踪当前显示的数据项 但是当数据源返回列表的时候 我们也可以选择支持多个数据项的分页操作 下面的例子显示了一个带有分页功能的FormView
<asp:FormView ID= FormView Runat= server DataSourceID= SqlDataSource HeaderText= Books for Author AllowPaging= True > <ItemTemplate> <asp:Image ID= Image ImageUrl= <%# Eval( title_id ~/Images/{ } gif ) %> Runat= server /> <asp:Label ID= Label Font Size= em Font Bold= true Text= <%# Eval( title ) %> runat= server /> <asp:Label ID= Label Text= <%# Eval( price { :c} ) %> runat= server /> </ItemTemplate></asp:FormView><asp:SqlDataSource ID= SqlDataSource Runat= server SelectCommand= SELECT dbo authors au_id dbo titles title_id dbo titles title dbo titles type dbo titles price dbo titles notes FROM dbo authors INNER JOIN dbo titleauthor ON dbo authors au_id = dbo titleauthor au_id INNER JOIN dbo titles ON dbo titleauthor title_id = dbo titles title_id WHERE (dbo authors au_id = @au_id) ConnectionString= <%$ ConnectionStrings:Pubs %> ><SelectParameters><asp:QueryStringParameter Name= au_id DefaultValue= QueryStringField= ID /></SelectParameters></asp:SqlDataSource>
双向数据绑定 FormView可以通过相关的数据源控件支持自动地更新 插入和删除操作(与DetailsView类似) 如果要定义或插入的UI 那么除了定义数据项模板(ItemTemplate)之外 你还要定义EditItemTemplate或InsertItemTemplate模板 在这个模板中 你可以把输入控件(例如文本框 检查框或下拉列表)绑定到数据源的字段 这些模板中的数据绑定使用了 双向 数据绑定语法 允许FormView从模板的输入控件中提取值并传递给数据源 这些数据绑定操作用新的Bind(fieldname)语法代替了Eval 请注意 使用Bind语法的数据绑定控件必须设置好ID属性 GridView或DetailsView执行更新或插入操作的时候(这些控件的Columns或Fields都会定义BoundFields 绑定字段) GridView或 DetailsView负责建立或插入模式中的输入UI 因此它能够自动地提取这些值并把它们传递给数据源 由于模板包含了任意的用户自定义UI控件 双向数据绑定语法就是必要的 以确保模板化控件(例如FormView)在应对更新 插入或删除操作的时候 知道应该从模板中提取那些控件的值 你仍然可以在EditItemTemplate中使用Eval语句进行数据绑定 来给数据源传递值 请注意 FormView与DetailsView和GridView一样支持DataKeyNames属性 它保存了传递给更新/删除操作的主键字典的原始值 即使这些值没有显示出来 FormView支持DefaultMode属性 它可以指定默认显示的模板 但在默认情况下FormView处于只读模式并显示ItemTemplate模板 为了把UI从只读模式转换为或插入模式 你可以给模板添加一个按钮控件 把该按钮的CommandName属性设置为Edit或New 在EditItemTemplate模板中 你可以增加按钮 把CommandName设置为Update或Cancel以提交或终止更新操作 类似的 你可以增加按钮 把CommandName设置为Insert或Cancel来提交或终止插入操作 下面的例子演示了定义了ItemTemplate和EditItemTemplate模板的FormView 其中的ItemTemplate模板包含了使用Eval(双向)绑定的控件 而EditItemTemplate模板则包含了使用Bind语句进行双向绑定的文本框控件 主键字段(PhotoID)是使用DataKeyNames属性存放在viewstate中的 该FormView包含了用于在模板之间进行切换的按钮 <asp:FormView ID= FormView runat= server DataSourceID= ObjectDataSource DataKeyNames= PhotoID ><EditItemTemplate> <b>Enter a New Caption:</b> <asp:TextBox Text= <%# Bind( Caption ) %> runat= server ID= CaptionTextBox /> <asp:Button ID= Button runat= server Text= Update CommandName= Update /> <asp:Button ID= Button runat= server Text= Cancel CommandName= Cancel /></EditItemTemplate><ItemTemplate> <asp:Label ID= CaptionLabel runat= server Text= <%# Eval( Caption ) %> Font Size= pt /><br /> <asp:Image ID= Image runat= server ImageUrl= <%# Eval( FileName images/{ } ) %> /> <br /> <asp:Button ID= Button runat= server Text= Edit Caption CommandName= Edit /> <asp:HyperLink ID= HyperLink Text= Back to Album NavigateUrl= <%# Eval( AlbumID PhotosDataList aspx?ID={ } ) %> runat= server /></ItemTemplate></asp:FormView><asp:ObjectDataSource ID= ObjectDataSource runat= server TypeName= DataComponentTableAdapters PhotosTableAdapter SelectMethod= GetPhoto UpdateMethod= UpdateCaption OldValuesParameterFormatString= original_{ } > <UpdateParameters> <asp:Parameter Name= Caption /> <asp:Parameter Name= Original_PhotoID /> </UpdateParameters><SelectParameters><asp:QueryStringParameter Name= PhotoID DefaultValue= QueryStringField= ID /></SelectParameters></asp:ObjectDataSource> GridView和DetailsView还支持模板化UI 它是通过给Columns或Fields集合增加TemplateField来实现的 TemplateField支持使用ItemTemplate EditItemTemplate和InsertItemTemplate(DetailsView才有)为控件的不同显示模式中的字段指定UI 与上面的FormView示例类似 EditItemTemplate或InsertItemTemplate中的双向数据绑定也允许GridView或DetailsView从这些模板的控件中提取值 TemplateField最常见的用途是给EditItemTemplate增加验证器控件 用于公开地验证GridView或DetailsView操作 下面的例子演示了这种技术
lishixinzhi/Article/program/ASP/201311/21726VB.NET中层次数据绑定TreeView的实现
提要:在VB6中,常将TreeView用来表示层次数据,但相关的与数据库进行交互的代码,需要大量的采用手工编码;在中,由于数据绑定功能的加强及语言特性的增强,可以很容易的实现TreeView与层次数据的绑定,本文将首先建立一个继承自TreeView的 dbTreeView,然后用一个单位(部门)的层次数据与dbTreeView进行数据绑定,并提供了与数据库进行交互的代码。
1、从层次数据的表达方式开始
在本例中,部门表(department)中有五个字段,如下表:
字段名 字段 类型说明
ID 自动编号 Key
Code String 编码
Name String 名称
PID Int 父结点的ID
CPtr boolean 是否有子结点
2、继承自TreeNode的myTreeNode
在myTreeNode中,新增了三个属性,如下表:
属性名 类型 说明
Value Object Key
PID Object 父结点的ID
CPtr Boolean 是否有子结点
在Init事件中,根据传入的四个参数,设置这三个属性和Text属性。
3、将dbTreeView绑定到数据源
属性名 类型 说明
Datasource dataview dbTreeVIew的数据源使用dataview,而不是object
Value Member string值成员(数据源的列名)
Display Member string显示(在Text中)成员
Pid Member string父ID成员
CPtr Member string是否有子结点
后四个属性对应myTreeNode的value,text,pid,cptr。
相关代码如下:
Protected Property DataSource() As Object
Get
Return mDataView
End Get
Set(ByVal Value As Object)
If Value Is Nothing Then
Else
mDataView = Value
cm = CType(Me.BindingContext(mDataView), CurrencyManager)
UpdateTreeView()
End If
End Set
End Property
Protected Property PidMember() As String
Get
Return mPidMember
End Get
Set(ByVal Value As String)
mPidMember = Value
End Set
End Property
Protected Property DisplayMember() As String
Get
Return Join(mDisplayMember, SplitChar)
End Get
Set(ByVal Value As String)
mDisplayMember = Split(Value, SplitChar)
End Set
End Property
’注意,这几个属性都是保护成员,必须在Init事件中设置:
Public Sub Init(ByVal dispmember As String, ByVal valuemember As String, ByVal pidmember As String, ByVal cptrmember As String, ByVal datasource As DataView)
Me.ValueMember = valuemember
Me.DisplayMember = dispmember
Me.PidMember = pidmember
Me.CPtrMember = cptrmember
Me.DataSource = datasource
’取value最大值,新增时将value+1,保证关健值唯一。
Me.mDataView.Sort = Me.ValueMember
Me.m_MaxID = Me.GetValue(Me.mDataView.Count - 1)
End Sub
设置DisplayMember属性的格式如:字段1;字段2;字段3,
在设置属性时,将传来的参数转换为字符串数组mDisplayMember,在检索值时返回数据如:值1 值2 值3.
Protected Overridable Function GetDisplay(ByVal Index As Integer) As Object
Dim i As Integer
Dim temp As String = ""
For i = 0 To mDisplayMember.Length - 1
temp = temp
IIf(i
0, LinkChar, "")
mDataView(Index)(mDisplayMember(i))
Next
Return temp
End Function
其它检索值的函数请参见源程序。
生成树
UpdateTreeView调用私有方法FillTree来生成树,需要注意的,FillTree只是生成指定结点的子结点并将其添加到指定结点,而不是一次就将所有结点添加到树中,如果未指定结点(第一次填充时),只是添加顶层结点。
Private Sub FillTree(ByRef pnode As myTreeNode, Optional ByVal filter As String = "")
mDataView.RowFilter = filter
Dim i As Integer, icol As Integer
Dim newnode As myTreeNode
RemoveHandler cm.PositionChanged, AddressOf cm_PositionChanged
Me.BeginUpdate()
For i = 0 To mDataView.Count() - 1
newnode = New myTreeNode(GetDisplay(i), GetValue(i), GetPid(i), GetCPtr(i))
’当有子结点时,为这个结点添加一个空子结点
If newnode.CPtr Then
Dim nullnode As New myTreeNode()
nullnode.Value = NoExpandNodeValue
newnode.Nodes.Add(nullnode)
End If
If pnode Is Nothing Then
Me.Nodes.Clear()
Me.Nodes.Add(newnode)
Else
pnode.Nodes.Add(newnode)
End If
Next
Me.EndUpdate()
mDataView.RowFilter = ""
AddHandler cm.PositionChanged, AddressOf cm_PositionChanged
End Sub
在展开有子结点的结点前,删除所有子结点,再用FillTree为待展开结点新增子结点。
Private Sub dbTreeView_BeforeExpand(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewCancelEventArgs) Handles MyBase.BeforeExpand
’当是新增结点引起BeforeExpand事件时,直接退出。
If ExpandWhenAddNode Then Exit Sub
’在展开结点前更新子结点
Dim currentnode As myTreeNode = CType(e.Node, myTreeNode)
With currentnode
.Nodes.Clear()
FillTree(currentnode, mPidMember
"= "
CInt(.Value))
End With
End Sub
4、实现数据与绑定控件的同步
要实现两个方面的同步:
1、 其它绑定控件(如textbox等)应与TreeView当前结点所指向的记录位置一致。
Private Sub dbTreeView_AfterSelect(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles MyBase.AfterSelect
If e.Node Is Nothing Then Exit Sub
’定位到position
cm.Position = GetPosition(CType(e.Node, myTreeNode).Value)
If AllowEdit Then
oldNode = e.Node
oldPos = cm.Position
End If
End Sub
2、在其它绑定控件改变了数据源后,更新树结点,这个工作在触发CurrencyManager的PositionChanged事件时进行。
Public Sub cm_PositionChanged(ByVal sender As Object, ByVal e As System.EventArgs)
If CType(Me.SelectedNode, myTreeNode).Value
GetValue(cm.Position) Then
Debug.WriteLine("Current node isn’t correct point to currencymanager.position!")
Me.SelectedNode = FindNodeByValue(GetValue(cm.Position), Me.Nodes)
End If
If AllowEdit Then
If Me.SelectedNode Is Nothing AndAlso cm.Position = cm.Count - 1 Then
’当新增记录时,新增树结点
If CType(cm.Current, DataRowView).IsNew Then
Me.SelectedNode = AddNode(cm.Position)
Exit Sub
End If
End If
If Not oldNode Is Nothing Then
If CType(oldNode, myTreeNode).Value = GetValue(oldPos) Then
’更新老结点
oldNode.Text = GetDisplay(oldPos)
Else
End If
End If
End If
End Sub
使用dbTreeView
程序运行后界面如下:
相关代码请参见源程序,这里不做详述,
需要注意的是删除操作并没有删除子结点,只是删除当前结点而已,删除子结点的工作应该在存储过程中递归实现,而不应放在前端。
使用数据绑定控件和ADO对象编程添加新纪录有什么不同
ADO控件一般和DATAGRID同时使用比较合适和方便。能方便的操作数据记录,
但如果不需要界面,仅需要实现连接数据库,然后做些删除,更新,添加的功能,则使用ADO对象较好。
使用 ADO Data 控件
ADO Data 控件使用 Microsoft ActiveX 数据对象(ADO) 来快速建立数据绑定的控件和数据提供者之间的连接。数据绑定控件是任何具有“数据源”属性的控件。数据提供者可以是任何符合 OLEDB 规范的数据源。使用 Visual Basic 的类模块也可以很方便地创建子集的数据提供者。
尽管可以在应用程序中直接使用 ActiveX 数据对象,但 ADO Data 控件有作为一个图形控件的优势(具有“向前”和“向后”按钮),以及一个易于使用的界面,使您可以用最少的代码创建数据库应用程序。
图 7.4 ADO Data 控件
在 Visual Basic 的“工具箱”中不少控件都可以作为数据绑定的控件,包括复选框、组合框、图像、标签、列表框、图片框、以及文本框控件等。此外,Visual Basic 还包括了若干种数据绑定的 ActiveX 控件,诸如 DataGrid、DataCombo、Chart、以及 DataList 控件等。用户也可以创建自己的数据绑定的 ActiveX 控件,或从其他开发商购买控件。
Visual Basic以前的版本提供了内在的 Data 控件和 Remote Data 控件 (RDC) 来进行数据访问。这两种控件仍包括在 Visual Basic 中,以提供向后兼容。不过,因为 ADO 的适应性更广,因此建议用户使用 ADO Data 控件来创建新的数据库应用程序。
详细信息 关于数据绑定的控件的完整列表位于“绑定到 ADO Data 控件的控件”中。要了解如何使用这些内在的Data 控件或 Remote Data 控件,请参阅“使用 Data 控件”或“使用 Remote Data 控件”。关于创建数据提供者的详细信息,请参阅“创建数据识别类”。
可能的用法
连接一个本地数据库或远程数据库。
打开一个指定的数据库表,或定义一个基于结构化查询语言 (SQL) 的查询、或存储过程、或该数据库中的表的视图的记录集合。
将数据字段的数值传递给数据绑定的控件,可以在这些控件中显示或更改这些数值。
添加新的记录,或根据对显示在绑定的控件中的数据的任何更改来更新一个数据库。
要创建一个客户、或前端数据库应用程序,应在窗体中添加 ADO Data 控件,以及其它所需要的任何 Visual Basic 控件。可以根据您的需要在窗体中放置多个 ADO Data 控件。不过,请注意,这种控件是一种相当“昂贵”的创建连接的方法,应在第一个控件至少有两个连接,且以后的每个控件至少多一个连接时使用。
用最少的代码创建一个前端数据库应用程序
通过在设计时设置一些属性,可以用最少的代码来创建一个数据库应用程序。如果正在使用OLE DB 数据源,则相应的Microsoft 数据链接名称(Data Link Name)(.MDL) 必须是在您的机器上创建的。请参阅“创建 Northwind 的OLE DB Data Link”,以获得一个循序渐进的示例。
要创建一个简单的前端数据库应用程序
窗体上放置一个 ADO Data 控件。(该图标的工具提示为 "ADODC"。)
如果该控件不在“工具箱”中,请按 CTRL+T 键,显示“部件”对话框。在这个“部件”对话框中,单击“Microsoft ADO Data Control”。
在“工具箱”中,单击选定“ADO 数据控件”。然后按 F4 键显示“属性”窗口。
在“属性”窗口中,单击“ConnectionString”显示“ConnectionString”对话框。
如果您已经创建了一个 Microsoft 数据链接文件(Data Link file)(.UDL),请选择“使用 OLE DB 文件”并单击“浏览”,以找到计算机上的文件。如果使用 DSN,则单击“使用 ODBC 数据源名”,并从框中选择一个 DSN,或单击“新建”创建一个。如果想创建一个连接字符串,请选择“使用 ConnectionString”,单击“生成”,然后使用“数据链接属性”对话框创建一个连接字符串。在创建连接字符串后,单击“确定”。ConnectionString 属性将使用一个类似于下面这一行的字符串来填充:
driver={SQL Server};server=bigsmile;uid=sa;pwd=pwd;database=pubs
在“属性”窗口中,将“记录源”属性设置为一个 SQL 语句。例如:
SELECT * FROM Titles WHERE AuthorID = 72
在访问一个表时,应始终包括一个 WHERE 子句。如果这样做失败,则会锁定整个表,这样对其他用户将是一个严重的障碍。
在窗体上再放置一个“文本框”控件,用来显示数据库信息。
在其“属性”窗口中,将 Text1 的“数据源”属性设为 ADO Data 控件的名称 (ADODC1)。这样就将这个文本框和 ADO Data 控件绑定在一起。
在其“属性”窗口中,单击“数据字段”将下拉得到一个可用的字段列表。单击所要显示的字段的名称。
对希望访问的其它每个字段重复第 6、7、8 步。
按 F5 键运行该应用程序。用户可以在 ADO Data 控件使用四个箭头按钮,从而允许用户地到达数据的开始、记录的末尾、或在数据内从记录移动到另一个记录。
在程序中设置 ConnectionString、Source、DataSource、以及 DataField
下面的代码演示了如何在程序中设置这四个属性。注意设置 DataSource 属性要使用 Set 语句。
Private Sub Form_Load()
With ADODC1
.ConnectionString = "driver={SQL Server};" & _
"server=bigsmile;uid=sa;pwd=pwd;database=pubs"
. RecordSource = "Select * From Titles Where AuthorID = 7"
End With
Set Text1.DataSource = ADODC1
Text1.DataField = "Title"
End Sub
ADO Data 控件的事件
ADO Data 控件提供了若干个可以编程的事件。下表说明了这些事件及其何时产生,不过这个表不是一个关于这些事件何时发生的所有条件的完整列表。更完整的信息,请参阅各个事件的参考主题。
事件 产生条件
WillMove 当执行 Recordset.Open、Recordset.MoveNext、Recordset.Move、Recordset.MoveLast、Recordset.MoveFirst、Recordset.MovePrevious、Recordset.Bookmark、Recordset.AddNew、Recordset.Delete、Recordset.Requery、Recordset.Resync 方法时
MoveComplete 在 WillMove 事件之后
WillChangeField 在 Value 属性更改之前
FieldChangeComplete 在 WillChangeField 事件之后
WillChangeRecord 当执行 Recordset.Update、Recordset.Delete、Recordset.CancelUpdate、Recordset.UpdateBatch、Recordset.CancelBatch 方法时
RecordChangeComplete 在 WillChangeRecord 事件之后
WillChangeRecordset 在执行 Recordset.Requery、Recordset.Resync、Recordset.Close、Recordset.Open、Recordset.Filter 方法时
RecordsetChangeComplete 在 WillChangeRecordset 事件之后
InfoMessage 当数据提供者返回一个结果时
详细信息 如果试图循序渐进地使用 ADO Data 控件,请参阅“使用 DataGrid 和 ADO 数据控件创建一个简单的数据库应用程序”,“ 创建一个简单的 DataCombo 应用程序”,以及“创建一个连接 DataList 控件的 DataGrid”。
数据源控件和数据绑定控件的区别
数据源控件提供数据源,可以使程序员在不编写代码或者编写极少代码的情况下实现数据源的配置。数据绑定控件是用于显示数据的,很多控件都能配置显示格式等,使用方便简洁,但是必须绑定数据源。当然数据源可以在后台编写代码绑定,也可以配置下,绑定数据源控件。
绑定型控件未绑定型控件和计算机控件分别在什么情况下使用
绑定型控件未绑定型控件和计算机控件分别在:跟踪控件值和进行简单的计算时使用。
当需要跟踪控件值的变化时,应该使用绑定型控件;当需要进行选择或输入信息时,应该使用未绑定型控件;当需要进行简单的计算时,应该使用计算器控件。
绑定型控件指的是与单元格数据绑定的控件,当所绑定的单元格数据被修改时,控件也会随之更新相应的值。
将数据绑定控件绑定到数据环境中有几种方式如何实现
大体上有两大类:设计时绑定,运行时绑定。【设计时绑定】——直接拖拽一个数据绑定控件(比如DataGridView,点击右上角小箭头出现向导提示窗口,然后请根据窗口提示一步步操作,系统应该自动生成强类型数据集(XXXXDataAdapter……),其中XXXX是数据表的名称。这样,一旦你运行程序,就直接可以看到数据了。
【运行时绑定】——拖拽一个数据绑定控件但是不给任何设置。通过后台代码设置DataSource或者相关属性进行绑定。这样在设计界面看上去是空白的,但是程序一旦运行,就自动触发了代码,进行绑定了。经典代码:using
(SqlDataAdapter
adapter
=
new
SqlDataAdapter("select
*
from
数据表名","数据库连接字符串")){
DataTable
dt
=
new
DataTable();
adapter.Fill(dt);
DataGridView1.DataSource
=
dt;}
什么叫数据绑定控件什么叫数据绑定
数据绑定 (data binding) 数据源与服务器控件的关联。 从一个Windows窗体的角度来看,“数据绑定”是一种把数据绑定到一种用户界面元素(控件)的通用机制。在Windows窗体中有两种数据绑定类型:简单绑定和复杂绑定。 简单绑定 简单绑定是将一个用户界面元素(控件)的属性绑定到一个类型(对象)实例上的某个属性的方法。例如,如果一个开发者有一个Customer类型的实例,那么他就可以把Customer的“Name”属性绑定到一个TextBox的“Text”属性上。“绑定”了这2个属性之后,对TextBox的Text属性的更改将“传播”到Customer的Name属性,而对Customer的Name属性的更改同样会“传播”到TextBox的Text属性。Windows窗体的简单数据绑定支持绑定到任何public或者internal级别的.NET Framework属性。 复杂数据绑定 复杂数据绑定是把一个基于列表的用户界面元素(比如ComboBox、Grid)绑定到一个数据实例列表(比如DataTable)的方法。和简单数据绑定一样,复杂数据绑定通常也是用户界面元素发生改变时传播到数据列表,数据列表发生改变时传播到用户界面元素。Windows窗体复杂数据绑定支持绑定到那些支持IList接口(或者是IEnumerable接口,如果使用的是BindingSource组件的话)的数据列表。
各种数据绑定控件间的区别
各种数据绑定控件间的区别 控件 主要数据结构 功能 描述和主要用途
GridView 表 读取与 每个字段一列
每个字段值对应于自已的一个单元格
在网络中显示多条记录
现有记录
DataList 表或树 读取和 所有字段在一个单元格中
一个单元格等于一条记录
在网格中显示多条记录
在GridView创建新记录
Repeater 表或树 只读 所有字段在一个单元格中
一个单元格等于一条记录
在网格中显示多条记录.为GridView创建新记录
DetailView 表或树 读取与、创建 显示单个记录
提供默认结构
现有记录
创建新记录
FormView 表或树 读取与、创建 显示单个记录
没有默认结构
现有记录
创建新记录
DropDownList和ListBox 表或树 只读 列出字段
让用户选择
显示供用户选择的数据
SiteMapPath 树 只读 列出主页和当前页面之间的页面名称
用于确定当前所处的站点位置
Menu 树 只读 显示根节点,能够选择一次展开一个子节点
用于显示选择的菜单
TreeView 树 只读 显示根节点,能够选择一次展开一个子节点
用于同时显示多个子节点
数据绑定控件比较(Reapter\DataList\GridView\DatailsView\FormView):
1.插入功能方面:
DetailsView和FormView具有插入功能,其它控件没有
2.模板
DataList\FormView\Repeater三种必须模板,而
GridView和DetailsView只有在将列转换成模板列以后才会出现各种模板.
3.自动分页功能
GridView ,DetailsView和FormView都是2.0版本新增控件,内置了分页,排序等等功能,
其他需要手工定义
4.数据呈现方式:
GridView,DataList,Repeator用于呈现多列数据,
DetailsView,FormView用于呈现单列数据,即常用的数据明细.
DataList和Reapter都需要模板列,而在模板列当中可以添加TextBox,同时可以指定TextBox的ID从而实现提取用户输入的值,但是DataGrid和GridView两个件是不需要模板的,它的功能是自动生成的我们无法知道那些文本框的ID,也就无法通过ID来获取用户的输入,那么可以通过对单元格的引用来实现:
private void DataGrid1_UpdateCommand(object source,xx)
{
string bkid=DataGrid1.DataKeys.toString();//提取主键
string bktitle=((TextBox)e.Item.Cells).Text;//提取用户的输入
}
一.进入状态:
DataList1.EditItemIndex = e.Item.ItemIndex;
DataGrid1.EditItemIndex = e.Item.ItemIndex;
GridView1.EditIndex = e.NewEditIndex;
DetailsView1.ChangeMode(DetailsViewMode.Edit);//进入状态
DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);//退出状态
二.设置主键:
DataList1.DataKeyField = "bkid";
DataGrid1.DataKeyField = "bkid";
string str={"bkid"};
GridView1.DataKeyNames = str;
三.提取主键:
string bkid = DataList1.DataKeys.ToString();//DataList
string bkid = DataGrid1.DataKeys.ToString();//DataGrid
string bkid = GridView1.DataKeys.Value.ToString();//GridView
string bkid = DetailsView1.DataKey.ToString();
四.查找控件:
string bktitle = ((TextBox)e.Item.FindControl("txtTile")).Text;//DataList
string bktitle = ((TextBox)e.Item.Cells).Text;//DataGrid
string bktitle = ((TextBox)GridView1.Rows).Text;
string bktitle = ((TextBox)DetailsView1.Rows).Text;
注意查找控件有两种方法:(各数据绑定控件的都可以用下面两种方法进行查找)
1.如果知道控件的ID可以用这种方法
((TextBox)e.Item.FindControl("txtTile")).Text;//这是查找
2.如果不知道控件的ID可用这种方法
((TextBox)e.Item.Cells).Text;//这是索引
五.给删除按钮添加确认:
protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
LinkButton lbtn =(LinkButton) e.Item.FindControl("lbtndelete");
lbtn.Attributes.Add("OnClick","return confirm(‘确定要删除吗?‘)");
}
}
protected void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
{
if(e.Item.ItemType==ListItemType.Item || e.Item.ItemType==ListItemType.AlternatingItem)
{
LinkButton lbtn = (LinkButton)e.Item.Cells;
lbtn.Attributes.Add("OnClick","return confirm(‘确认删除?‘)");
}
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType== DataControlRowType.DataRow)
{
string strid = e.Row.Cells.Text;//获取第一行的字段值;
e.Row.Cells.Attributes.Add("OnClick", "return confirm(‘确认删除\""+strid+"\"?‘)");
//用了两个转义符将第一列的值用引号括起来,注意转义符后面一个将不被解释,是直接放上去;
什么是数据绑定型控件与非绑定型控件它们使用时要注意什么
看下属性里有没有数据源这一属性,若有就可以绑定数据;其中若是非可视化的控件,一般都是必须绑定的;若是可视化控件大多都是允许录入、选择等操作的,既可使用绑定数据源功能,也可用于其他数据显示、等功能,看具体使用环境了。

更多文章:
开源工作流任务调度系统:Apache DolphinScheduler?面向敏捷开发团队的 7 个开源项目管理工具
2026年8月3日 07:30
工作流技术有哪些(翼发云OA办公系统用的什么技术来实现可视化工作流的)
2025年8月2日 22:15
接口的请求字段命名空间怎么改(出现“应输入类型、命名空间定义或文件尾”错误 怎么改)
2026年7月21日 08:15
js数组作为函数参数怎么传入(js怎么在function间传二维数组)
2025年11月6日 03:30
update health tools是什么(windows support tools 是什么)
2025年8月2日 05:00
getline怎么结束输入(c++输入输出流中的getline()函数里面的终止标识符参数的默认值为’\n’,如果要改为用户输)
2026年5月25日 17:15
move on to([第227次听写]move on后接什么)
2026年8月19日 19:00
jetpack compose完全开发手册(Jetpack Compose 网络请求)
2025年7月27日 07:00
curl命令在哪个目录下(debian怎么安装curl命令)
2025年12月18日 21:00
external stimulation(能不能把我变成不是闷蛋 我和旁边的朋友不合群 和女朋友很少说话)
2026年4月6日 17:00
java项目管理gui系统界面(如何在JAVA的GUI界面里插入一个显示实时时间的JPanel)
2026年1月17日 06:15











