Я пытаюсь заставить 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>
Сетка отображается нормально, когда не в режиме редактирования - выбранный тип УАТС показывает свое значение в элементе управления asp: Label. Там нет ничего удивительного.
Я загружаю список значений для DropDownList в локальный элемент с именем _pbxTypes
в событии OnLoad
формы. Я это проверил - работает, значения есть.
Теперь моя задача: когда сетка переходит в режим редактирования для конкретной строки, мне нужно связать список АТС, хранящийся в _pbxTypes
.
Достаточно просто, подумал я - просто возьмите объект выпадающего списка в событии 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
не существует (или не может быть найден).
Что мне не хватает ?? Должно быть, что-то действительно глупое ... но пока все мои поиски в Google, чтение элементов управления GridView и опрос друзей не помогли.
Кто может определить недостающую ссылку? ; -)