这也许是既定目标更有价值的情况之一。
您没有提及或注明您的数据来自哪里。
假设我有一个酒店列表。我想要一个酒店“评级”的单选按钮列表。
好吧,在表单设计器中 - 放入网格视图中。生成列。 (然后从标记中删除该数据源。并在属性表中删除 dataSource1 设置。
好的,到目前为止?这大约是 2 分钟的时间。
现在,放入一个单选按钮列表。 (有时我将它放在网格外的表单上。选择单选列表,然后添加选项(0-5 级)。
现在将该单选按钮列表移动到网格视图中。您必须将其包裹在项目模板周围。
所以请注意我大部分时间是如何在这里使用构建器的。 (即使对于单选按钮列表中的选择,我也使用了设计器的构建器)。
好的,现在我们的标记如下所示:
<br />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False"
ReadOnly="True" SortExpression="ID" />
<asp:BoundField DataField="HotelName" HeaderText="HotelName" SortExpression="HotelName" />
<asp:BoundField DataField="City" HeaderText="City" SortExpression="City" />
<asp:TemplateField HeaderText="Rating For Hotel">
<ItemTemplate>
<asp:RadioButtonList ID="RadioButtonList2" runat="server" RepeatDirection="Horizontal"
SelectedValue = '<%# Bind("Rating") %>'
>
<asp:ListItem Value="0">No Rating</asp:ListItem>
<asp:ListItem Value="1">Poor</asp:ListItem>
<asp:ListItem Value="2">Fair</asp:ListItem>
<asp:ListItem Value="3">Good</asp:ListItem>
<asp:ListItem Value="4">Excellent</asp:ListItem>
</asp:RadioButtonList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<br />
<br />
<asp:Button ID="Button1" runat="server" Text="Update Choices" />
<br />
到目前为止?这已经接近所有拖放。如前所述,我使用了这样的 RadioButton 列表生成器:
然后我添加了我的选择:
如前所述,我按照上面的方法将该单选按钮列表剪切+粘贴到网格中。
现在,在我的加载中,我有这个代码:
If IsPostBack = False Then
Dim strSQL As String = "SELECT TOP 10 ID, HotelName, City, Rating from tblHotels ORDER BY HotelName"
Dim cmdSQL As New SqlCommand(strSQL, New SqlConnection(My.Settings.Test3))
cmdSQL.Connection.Open()
GridView1.DataSource = cmdSQL.ExecuteReader
GridView1.DataBind()
GridView1.Columns(0).Visible = False
cmdSQL.Connection.Close()
Session("cmd") = cmdSQL
End If
现在我明白了:
想想这是多么容易。
到目前为止,我只写了大约 7 行代码。
现在用户可以更改/选择单选按钮设置。
我现在如何将行更新回数据库?
嗯,更新按钮将如下所示:
Dim dr As GridViewRow
Dim cmdSQL As SqlCommand = Session("cmd")
cmdSQL.Connection.Open()
Dim rst As New DataTable
rst.Load(cmdSQL.ExecuteReader)
For Each dr In GridView1.Rows
Dim rbL As RadioButtonList = dr.FindControl("RadioButtonList2")
rst.Rows(dr.RowIndex).Item("Rating") = rbL.SelectedValue
Next
Dim daUpdate As New SqlDataAdapter(cmdSQL)
Dim cmdUpdate As New SqlCommandBuilder(daUpdate)
daUpdate.Update(rst)
cmdSQL.Connection.Close()
'cmdSQL.Dispose()
所以,这会将选择发送回数据库。
再次,看看这是多么少的代码和努力。
因此,您可能希望在用户在该单选按钮中做出选择后扩展您想要执行的操作。那么您想查看/检查这些值吗?
您要将选择发送回数据库吗?
正如您在上面看到的,我们真的不关心(或不需要)每个单选按钮列表的某些事件。
如果这是某种调查系统?然后我会再次从数据库中驱动选择。如果有 5 个答案或其他什么,则按上述显示结果。
记住,无论是列表视图、网格视图,还是作为“中继器”的控件块?
那么上面的代码模式就大同小异了。
现在,在上面我可以/可以触发单选按钮列表中给定选项的行事件 - 但此时我不相信这实际上是一个要求 - 但你可以获取/获取该事件如果您愿意,并对每一行采取行动,并作为选择单选按钮列表的结果(更改值)。
即使您的目标不是更新数据库并且有一个“N”(未知)选项列表,某些类型的数据网格或列表视图或数据重复器也会非常轻松地切分这个问题 - 并且如你所见?
我写的代码很少。而且我让 VS 和表单设计师为我编写了 99% 的标记 - 标记的手工编码很少 - 我让设计师和向导为我完成所有脏活。