【发布时间】:2012-09-14 22:01:12
【问题描述】:
我正在尝试设置一个中继器,该中继器具有下拉列表,这些下拉列表的值是根据使用 linq 从数据库填充的数组绑定的数据来选择的。
我遇到的问题是每个下拉列表在渲染时都具有相同的选定值,这也恰好是数组中的最后一个值。我需要每个选定的值与它的标签相对应,该标签存储在以前提交的表中。
func.ConfigurePastClientSetting(label.Text, krmid) 返回一个值,该值等于 ddl 内部的值之一,该值已从过去的表单提交存储在数据库中。
Private Sub rptDropDownInfo_ItemDataBound(sender As Object,
e As System.Web.UI.WebControls.RepeaterItemEventArgs) _
Handles rptDropDownInfo.ItemDataBound
Dim selected As New List(Of String)
If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
Dim ddl As DropDownList = e.Item.FindControl("ddlEloquaValues")
Dim column As EbmsColumnLabel = DirectCast(e.Item.DataItem, EbmsColumnLabel)
ddl.Items.AddRange(ddlELQ.Items.OfType(Of ListItem)().ToArray())
ddl.ClearSelection()
ddl.Items.FindByValue(func.ConfigurePastClientSetting(column.displayname, krmid)).Selected = True
selected.Add(ddl.SelectedItem.Value)
End If
End Sub
如果我删除 ddl.ClearSelection,我会收到一个“下拉列表中的选定值不能超过一个错误。这是标记:
<asp:Repeater ID="rptDropDownInfo" runat="server">
<HeaderTemplate><table><tr><td style="width:60px;padding-left:20px;">KRM</td><td></td><td>Eloqua</td></tr></table></HeaderTemplate>
<ItemTemplate>
<tr>
<asp:Label ID="lblColumnNames" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "DisplayName") %>'></asp:Label><td>map to</td>
<asp:DropDownList ID="ddlEloquaValues" runat="server">
</asp:DropDownList>
<td>
<asp:Label ID="lblWarningLabels" runat="server" Text=""></asp:Label></td></tr>
</ItemTemplate>
</asp:Repeater>
我尝试检查 first(0) ddl.SelectedValue 并得到数组中的最后一项:
Private Sub Page_PreRender(sender As Object, e As System.EventArgs) Handles Me.PreRender
If IsPostBack Then
Dim ddl As DropDownList = rptDropDownInfo.Items(0).FindControl("ddlEloquaValues")
Dim check = ddl.SelectedItem.Value
End If
End Sub
【问题讨论】:
-
什么是
func.ConfigurePastClientSetting(label.Text, krmid)?查看相关的 aspx 标记也可能会有所帮助。您应该使用e.Item.DataItem来获取项目的底层数据源。 -
@TimSchmelter 我已根据您的建议进行了更改,但仍然没有运气。此外,我还提供了更多细节。
标签: vb.net drop-down-menu repeater itemdatabound