【发布时间】:2010-10-24 10:13:27
【问题描述】:
我正在尝试让 ASP.NET 3.5 GridView 在显示时将所选值显示为字符串,并显示 DropDownList 以允许我在编辑时从给定的选项列表中选择一个值。看起来很简单?
我的网格视图看起来像这样(简化):
<asp:GridView ID="grvSecondaryLocations" runat="server"
DataKeyNames="ID" OnInit="grvSecondaryLocations_Init"
OnRowCommand="grvSecondaryLocations_RowCommand"
OnRowCancelingEdit="grvSecondaryLocations_RowCancelingEdit"
OnRowDeleting="grvSecondaryLocations_RowDeleting"
OnRowEditing="grvSecondaryLocations_RowEditing"
OnRowUpdating="grvSecondaryLocations_RowUpdating" >
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lblPbxTypeCaption" runat="server"
Text='<%# Eval("PBXTypeCaptionValue") %>' />
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddlPBXTypeNS" runat="server"
Width="200px"
DataTextField="CaptionValue"
DataValueField="OID" />
</EditItemTemplate>
</asp:TemplateField>
</asp:GridView>
网格在不处于编辑模式时显示正常 - 所选 PBX 类型在 asp:Label 控件中显示其值。这并不奇怪。
我将 DropDownList 的值列表加载到表单的 OnLoad 事件中名为 _pbxTypes 的本地成员中。我验证了这一点 - 它有效,值在那里。
现在我的挑战是:当网格进入特定行的编辑模式时,我需要绑定存储在_pbxTypes 中的 PBX 列表。
很简单,我想 - 只需在 RowEditing 事件中抓取下拉列表对象并附加列表:
protected void grvSecondaryLocations_RowEditing(object sender, GridViewEditEventArgs e)
{
grvSecondaryLocations.EditIndex = e.NewEditIndex;
GridViewRow editingRow = grvSecondaryLocations.Rows[e.NewEditIndex];
DropDownList ddlPbx = (editingRow.FindControl("ddlPBXTypeNS") as DropDownList);
if (ddlPbx != null)
{
ddlPbx.DataSource = _pbxTypes;
ddlPbx.DataBind();
}
.... (more stuff)
}
问题是 - 我从来没有从 FindControl 电话中得到任何回报 - 似乎 ddlPBXTypeNS 不存在(或找不到)。
我错过了什么?一定是真的很愚蠢....但到目前为止,我所有的谷歌搜索、阅读 GridView 控件和询问朋友都没有帮助。
谁能发现缺失的链接? ;-)
【问题讨论】:
标签: asp.net gridview drop-down-menu dynamic-binding