Я пытаюсь заставить GridView ASP.NET 3.5 отображать выбранное значение как строку при отображении и показать DropDownList, чтобы я мог выбрать значение из заданного списка параметров при редактировании. Кажется, достаточно просто?
Мое gridview выглядит так (упрощено):
<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 и запросы друзей не помогли.
Кто может обнаружить недостающую ссылку?; -)