【发布时间】:2013-12-26 17:48:25
【问题描述】:
我完成这项工作的方式太丑陋了,所以我知道我一定遗漏了一些东西.. 告诉我如何更好地设置 DDL 的 SelectedValue。 我尝试在 DropDownList 标记中设置 SelectedValue,并在 OnDataBound 事件中使用 Eval("b.codeID"),这给了我一个“只能使用 Eval()、XPath() 和 Bind() 等数据绑定方法在数据绑定控件的上下文中。”错误。 下面的代码是现在有效的。我不喜欢它是必须将一个 asp:Label 绑定到 b.CatID 只是为了在 OnDataBound 事件中引用它以在 For Each 循环中使用它。我应该能够以更优雅的方式获取 eval("b.CodeID") 的值。
<asp:Repeater ID="rptLabor" runat="server" OnItemCommand="button_click" OnItemDataBound="rptLaborDataBound">
<td><asp:DropDownList ID="ddlLaborCodeEdit" runat="server"></asp:DropDownList>
<asp:Label ID="lblddlLaborCodeEdit" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "b.catid")%>' Visible="false"></asp:Label></td>
Sub rptLaborDataBound(ByVal s As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs)
If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.Item Then
Dim ddlLaborCode As DropDownList = CType(e.Item.FindControl("ddlLaborCodeEdit"), DropDownList)
Dim lblLaborCode As Label = CType(e.Item.FindControl("lblddlLaborCodeEdit"), Label)
SetddlLaborBillCode(ddlLaborCode)
For Each item As System.Web.UI.WebControls.ListItem In ddlLaborCode.Items
If item.Value = lblLaborCode.Text Then
item.Selected = True
Exit For
End If
Next
Protected Sub SetddlLaborBillCode(ByVal ddl As DropDownList)
Dim db As New TtCSIDataContext
Dim sel = (From a In db.tblBillCodesByClients _
Where a.ClientID = ddlClient.Text And a.Grp = "LAB" _
Select a.CodeID, Code = a.Code & " | " & a.CodeDescr).ToList
ddl.DataSource = sel
ddl.DataTextField = "Code"
ddl.DataValueField = "CodeID"
ddl.DataBind()
End Sub
【问题讨论】: