📄 kj08-03-02.txt
字号:
8.3.2 DataList控件应用举例
前面已经提到,可以利用DataList控件提供能完成数据库记录编辑的界面,下面是一个简单的例子,在该例中,虽然代码不多,但由于DataList控件本身具有强大功能,因此构造出的界面比较严谨而实用。
本例的设计思路是,首先利用DataList控件读取并显示数据库中的记录,当用户单击“编辑”按纽后,转入编辑状态,字段内容显示在文本框中,此时,用户可更改字段内容,更改完成后,单击“更新”按钮,则文本框中的数据将覆盖数据库中原有的内容(这种覆盖是通过位于事件过程中的SQL语句完成的)。删除记录的操作过程与上述过程类似。
本例的运行结果如图8-3-1所示。请仔细阅读源码。
Prac08-06.aspx
#01: <!-- #include File="Prac07-07.inc" -->
#02: <Script Language="VB" Runat="Server">
#03: Sub BindList()
#04: Dim strSQL As String = "Select Top 5 d_bookname As 书名,d_author As 作
者,profession_no As 适用专业,d_id From t_source"
#05: myDataList.DataSource = CreateDataSet(strSQL,"ssyyrr.mdb",
"教学参考书")
#06: myDataList.DataMember="教学参考书"
#07: myDataList.DataBind()
#08: End Sub
#09: Sub Page_Load(sender As Object, e As Eventargs)
#10: If Not IsPostBack Then BindList()
#11: End Sub
#12: Sub DataList_EditCommand(sender As Object, e As DataListCommandEventArgs)
#13: myDataList.EditItemIndex = e.Item.ItemIndex
#14: BindList()
#15: End Sub
#16: Sub DataList_CancelCommand(sender As Object, e As DataListCommandEventArgs)
#17: myDataList.EditItemIndex = -1
#18: BindList()
#19: End Sub
#20: Sub ExecuteSQL(strSQL As String)
#21: Dim objConn As New OleDbConnection()
#22: objConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=" & Server.MapPath("Ssyyrr.mdb")
#23: objConn.Open()
#24: Dim objCmd As New OleDbCommand(strSQL, objConn)
#25: objCmd.ExecuteNonQuery
#26: End Sub
#27: Sub DataList_DeleteCommand(sender As Object, e As DataListCommandEventArgs)
#28: Dim strSQL As String = "Delete From t_source Where " &
myDataList.DataKeyField & "=" & myDataList.DataKeys(e.Item.ItemIndex)
#29: ExecuteSQL(strSQL)
#30: myDataList.EditItemIndex = -1
#31: BindList()
#32: End Sub
#33: Sub DataList_UpdateCommand(sender As Object, e As DataListCommandEventArgs)
#34: Dim d_bookname As String =
CType(e.Item.FindControl("d_bookname"), TextBox).Text
#35: Dim d_author As String =
Ctype(e.Item.FindControl("d_author"), TextBox).Text
#36: Dim profession_no As String =
Ctype(e.Item.FindControl("profession_no"), TextBox).Text
#37: Dim strSQL As String = "Update t_source Set d_bookname='" & d_bookname
& "',d_author ='" & d_author & "',profession_no ='" & profession_no
& "' Where " & myDataList.DataKeyField & "=" &
myDataList.DataKeys(e.Item.ItemIndex)
#38: ExecuteSQL(strSQL)
#39: myDataList.EditItemIndex = -1
#40: BindList()
#41: End Sub
#42: </Script>
#43: <Html>
#44: <Body BgColor="#ffffcc">
#45: <H1 Align="Center">教学参考书管理系统</H1>
#46: <Form Runat="Server">
#47: <Asp:DataList Runat="Server" Id="myDataList" CellPadding="3"
Width="700" HorizontalAlign="Center"
OnEditCommand="DataList_EditCommand"
OnUpdateCommand="DataList_UpdateCommand"
OnDeleteCommand="DataList_DeleteCommand"
OnCancelCommand="DataList_CancelCommand"
DataKeyField="d_id"
ExtractTemplateRows="True" Border="1" BorderColor="#ffffcc"
GridLines="Horizontal">
#48: <HeaderTemplate>
#49: <Asp:Table Runat="Server">
#50: <Asp:TableRow Runat="Server" HorizontalAlign="Center">
#51: <Asp:TableCell Runat="Server">书名</Asp:TableCell>
#52: <Asp:TableCell Runat="Server">作者</Asp:TableCell>
#53: <Asp:TableCell Runat="Server">适用专业</Asp:TableCell>
#54: <Asp:TableCell Runat="Server">操作</Asp:TableCell>
#55: </Asp:TableRow>
#56: </Asp:Table>
#57: </HeaderTemplate>
#58: <ItemTemplate>
#59: <Asp:Table Runat="Server">
#60: <Asp:TableRow Runat="Server" HorizontalAlign="Left">
#61: <Asp:TableCell Runat="Server"><%# Container.DataItem("书名")
%></Asp:TableCell>
#62: <Asp:TableCell Runat="Server"><%# Container.DataItem("作者")
%></Asp:TableCell>
#63: <Asp:TableCell Runat="Server" HorizontalAlign="Center"><%#
Container.DataItem("适用专业") %></Asp:TableCell>
#64: <Asp:TableCell Runat="Server"
HorizontalAlign="Center"><Asp:LinkButton Runat="Server"
Text="编辑" CommandName="Edit"/></Asp:TableCell>
#65: </Asp:TableRow>
#66: </Asp:Table>
#67: </ItemTemplate>
#68: <EditItemTemplate>
#69: <Asp:Table Runat="Server">
#70: <Asp:TableRow Runat="Server" HorizontalAlign="Left">
#71: <Asp:TableCell Runat="Server">
#72: <Asp:TextBox Runat="Server" Id="d_bookname" Text='<%#
Container.DataItem("书名") %>' Width="250pt" />
#73: </Asp:TableCell>
#74: <Asp:TableCell Runat="Server">
#75: <Asp:TextBox Runat="Server" Id="d_author" Text='<%#
Container.DataItem("作者") %>' Width="50pt"/>
#76: </Asp:TableCell>
#77: <Asp:TableCell Runat="Server" HorizontalAlign="Center">
#78: <Asp:TextBox Runat="Server" Id="profession_no" Text='<%#
Container.DataItem("适用专业") %>' Width="25pt" />
#79: </Asp:TableCell>
#80: <Asp:TableCell Runat="Server" Width="75pt"
HorizontalAlign="Center">
#81: <Asp:LinkButton Runat="Server" Width="20" Text="更新"
CommandName="Update" />
#82: <Asp:LinkButton Runat="Server" Width="20" Text="删除"
CommandName="Delete" />
#83: <Asp:LinkButton Runat="Server" Width="20" Text="取消"
CommandName="Cancel" />
#84: </Asp:TableCell>
#85: </Asp:TableRow>
#86: </Asp:Table>
#87: </EditItemTemplate>
#88: <HeaderStyle HorizontalAlign="Center" BackColor="#66CCFF"
ForeColor="Crimson" />
#89: <ItemStyle BackColor="Moccasin" />
#90: <EditItemStyle BackColor="Lavender" />
#91: </Asp:DataList>
#92: </Form>
#93: </Body>
#94: </Html>
DataList控件应用举例(2)
Prac08-07.aspx
#01: <!-- #include File="Prac07-07.inc" -->
#02: <Script Language="VB" Runat="Server">
#03: Sub BindList()
#04: Dim strSQL As String = "Select Top 5 d_bookname As 书名,d_author As
作者,profession_no As 适用专业,d_id From t_source"
#05: myDataList.DataSource = CreateDataSet(strSQL, "ssyyrr.mdb",
"教学参考书")
#06: myDataList.DataMember="教学参考书"
#07: myDataList.DataBind()
#08: End Sub
#09: Sub DropDownListSource(Gd as Control,Type as string,TextField as
String,ValueField as string,NowIndex as integer,Sname as string,ControlName
as string,CellPosition as integer,CompareValue as string,CompareField as
string)
#10: Dim ConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=" & Server.MapPath("ssyyrr.mdb")
#11: Dim objCmd1 As New OleDbDataAdapter("Select profession_no From
profession_name Order By profession_no", ConnString)
#12: Dim DS1 As New DataSet()
#13: objCmd1.Fill(DS1, Sname)
#14: Dim dt as ListBox
#15: If Type="DataGrid" then
#16: Dim nc as DataGrid = Ctype(Gd,DataGrid)
#17: dt=Ctype(nc.Items(NowIndex).Cells(CellPosition).FindControl
(ControlName),ListBox)
#18: ElseIf Type="DataList" then
#19: Dim nc as DataList = Ctype(Gd,DataList)
#20: dt=Ctype(nc.Items(NowIndex).FindControl(ControlName),ListBox)
#21: End If
#22: dt.DataSource=DS1
#23: dt.DataTextField=TextField
#24: dt.DataValueField=ValueField
#25: dt.DataBind()
#26: If CompareValue=""
#27: dt.SelectedIndex=0
#28: Return
#29: End If
#30: Dim f as integer = 0
#31: Dim Row as DataRow
#32: For each Row in DS1.Tables(Sname).Rows
#33: If Row(CompareField).ToString()=CompareValue then
#34: dt.SelectedIndex=f
#35: Exit Sub
#36: End If
#37: f+=1
#38: Next
#39: End Sub
#40: Sub Page_Load(sender As Object, e As Eventargs)
#41: If Not IsPostBack Then BindList()
#42: End Sub
#43: Sub DataList_EditCommand(sender As Object, e As DataListCommandEventArgs)
#44: Dim v as Label = Ctype(e.Item.FindControl("d_p_no"),Label)
#45: Dim v1 as string = v.Text
#46: myDataList.EditItemIndex = e.Item.ItemIndex
#47: BindList()
#48: Dim h as Control = Ctype(myDataList,Control)
#49: DropDownListSource(h,"DataList","profession_no","profession_no",
e.Item.ItemIndex,"专业名称表","profession_no1",2,v1,"profession_no")
#50: End Sub
#51: Sub DataList_CancelCommand(sender As Object, e As DataListCommandEventArgs)
#52: myDataList.EditItemIndex = -1
#53: BindList()
#54: End Sub
#55: Sub ExecuteSQL(strSQL As String)
#56: Dim objConn As New OleDbConnection()
#57: objConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=" & Server.MapPath("ssyyrr.mdb")
#58: objConn.Open()
#59: Dim objCmd As New OleDbCommand(strSQL, objConn)
#60: objCmd.ExecuteNonQuery
#61: End Sub
#62: Sub DataList_DeleteCommand(sender As Object, e As DataListCommandEventArgs)
#63: Dim strSQL As String = "Delete From t_source Where " &
myDataList.DataKeyField & "=" & myDataList.DataKeys(e.Item.ItemIndex)
#64: ExecuteSQL(strSQL)
#65: myDataList.EditItemIndex = -1
#66: BindList()
#67: End Sub
#68: Sub DataList_UpdateCommand(sender As Object, e As DataListCommandEventArgs)
#69: Dim d_bookname As String = CType(e.Item.FindControl("d_bookname"),
TextBox).Text
#70: Dim d_author As String = Ctype(e.Item.FindControl("d_author"),
TextBox).Text
#71: Dim profession_no As String = Ctype(e.Item.FindControl
("profession_no1"), ListBox).SelectedItem.Text
#72: Dim UpdateDate As DateTime = DateTime.Now.Date()
#73: Dim strSQL As String = "Update t_source Set d_bookname='" & d_bookname
& "',d_author ='" & d_author & "',profession_no ='" & profession_no
& "' Where " & myDataList.DataKeyField & "=" &
myDataList.DataKeys(e.Item.ItemIndex)
#74: ExecuteSQL(strSQL)
#75: myDataList.EditItemIndex = -1
#76: BindList()
#77: End Sub
#78: </Script>
#79: <Html>
#80: <Body BgColor="#ffffcc">
#81: <H1 Align="Center">教学参考书管理系统</H1>
#82: <Form Runat="Server">
#83: <Asp:DataList Runat="Server" Id="myDataList" CellPadding="3"
Width="700" HorizontalAlign="Center"
OnEditCommand="DataList_EditCommand"
OnUpdateCommand="DataList_UpdateCommand"
OnDeleteCommand="DataList_DeleteCommand"
OnCancelCommand="DataList_CancelCommand" DataKeyField="d_id"
ExtractTemplateRows="True" Border="1" BorderColor="White"
GridLines="Horizontal">
#84: <HeaderTemplate>
#85: <Asp:Table Runat="Server" Width="500">
#86: <Asp:TableRow Runat="Server" HorizontalAlign="Center">
#87: <Asp:TableCell Runat="Server" Width="50">书名</Asp:TableCell>
#88: <Asp:TableCell Runat="Server" Width="70">作者</Asp:TableCell>
#89: <Asp:TableCell Runat="Server" Width="100">
适用专业 </Asp:TableCell>
#90: <Asp:TableCell Runat="Server" Width="80">操作</Asp:TableCell>
#91: </Asp:TableRow>
#92: </Asp:Table>
#93: </HeaderTemplate>
#94: <ItemTemplate>
#95: <Asp:Table Runat="Server" >
#96: <Asp:TableRow Runat="Server" HorizontalAlign="Left">
#97: <Asp:TableCell Runat="Server"><%# Container.DataItem("书名")
%></Asp:TableCell>
#98: <Asp:TableCell Runat="Server"><%# Container.DataItem("作者")
%></Asp:TableCell>
#99: <Asp:TableCell Runat="Server" HorizontalAlign="Center">
#100: <%# Container.DataItem("适用专业") %>
#101: <asp:Label runat="server" Text=<%# Container.DataItem("适用专业")
%> id="d_p_no" visible="false"/>
#102: </Asp:TableCell>
#103: <Asp:TableCell Runat="Server" HorizontalAlign="Center">
#104: <Asp:LinkButton Runat="Server" Text="编辑" CommandName="Edit"/>
#105: </Asp:TableCell>
#106: </Asp:TableRow>
#107: </Asp:Table>
#108: </ItemTemplate>
#109: <EditItemTemplate>
#110: <Asp:Table Runat="Server" Width="500">
#111: <Asp:TableRow Runat="Server" HorizontalAlign="Left">
#112: <Asp:TableCell Runat="Server">
#113: <Asp:TextBox Runat="Server" Id="d_bookname" Text=
'<%# Container.DataItem("书名") %>' Width="250pt" />
#114: </Asp:TableCell>
#115: <Asp:TableCell Runat="Server">
#116: <Asp:TextBox Runat="Server" Id="d_author" Text=
'<%# Container.DataItem("作者") %>' Width="50pt" />
#117: </Asp:TableCell>
#118: <Asp:TableCell Runat="Server" HorizontalAlign="Center">
#119: <Asp:Listbox Runat="Server" Id="profession_no1" Rows=1
Width="40pt" />
#120: </Asp:TableCell>
#121: <Asp:TableCell Runat="Server" Width="75pt"
HorizontalAlign="Center">
#122: <Asp:LinkButton Runat="Server" Width="20" Text="更新"
CommandName="Update" />
#123: <Asp:LinkButton Runat="Server" Width="20" Text="删除"
CommandName="Delete" />
#124: <Asp:LinkButton Runat="Server" Width="20" Text="取消"
CommandName="Cancel" />
#125: </Asp:TableCell>
#126: </Asp:TableRow>
#127: </Asp:Table>
#128: </EditItemTemplate>
#129: <HeaderStyle HorizontalAlign="Center" BackColor="#66CCFF"
ForeColor="Crimson" />
#130: <ItemStyle BackColor="Moccasin" />
#131: <EditItemStyle BackColor="Lavender" />
#132: </Asp:DataList>
#133: </Form>
#134: </Body>
#135: </Html>
? #101:定义一个Id为d_p_no的标签控件,用于保存当前记录的“适用专业”字段值。在确定编辑界面下拉表的初始选择条目时,将使用这个值。
? #09~#39:定义过程DropDownListSource()过程。该过程共有10个形参,依次是列表框所在控件、所在控件的类型(可以是DataList或下面将要介绍的DataGrid)、与列表框的Text属性对应的字段、与列表框的Value属性对应的字段、列表框所在记录行的索引值、与列表框控件绑定的内存数据表名称、列表框的Id、单元格(只用于DataGrid控件),列表框所在记录中相应字段的初始值以及用于与该值对比的内存数据表中字段的名称。
? #10~#13:建立内存数据表。
? #14~#21:建立指向DataList控件中的列表框的普通列表框对象。
? #22~#25:将列表框绑定到内存数据表。
? #26~#38:确定应该选择列表框中的哪个条目。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -