ASP.NET - GridView - Как программно добавить и прочитать новые элементы управления в ячейку? - PullRequest
0 голосов
/ 14 июня 2010

Вот настройки: Я программно заполняю свой gridview, используя запрос LINQ to SQL. Затем я вхожу в режим редактирования и хочу заменить некоторые стандартные элементы управления TextBox на DropDownLists, например:

'выдержка из GridView1_RowEditing

    Dim ddlist1 As New DropDownList
    Dim res1 = From items1 In mydb.Items
             Select items1.Col10

    ddlist1.DataSource = res1
    ddlist1.DataBind()

    GridView1.Rows.Item(0).Cells(1).Controls.Add(ddlist1)

В данный момент у меня есть сетка, показывающая стандартный текстовый элемент управления и новый элемент управления DDList (в столбце 1). Проблема в том, что я не могу прочитать значение из DDList в методе RowUpdating. Похоже, элемент управления DDList отсутствует в коллекции GridView1.Rows.Item (0) .Cells (1) .Controls. Метод RowUpdating видит только стандартный элемент управления TextBox и может прочитать его значение. Любые предложения приветствуются. Я просто чего-то здесь не понимаю: (

1 Ответ

0 голосов
/ 14 июня 2010

Используйте TemplateField, и затем вы можете найти раскрывающийся список с помощью FindControl

<asp:GridView ID="GridView1" runat="server">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:DropDownList ID="DropDownList1" runat="server">
                </asp:DropDownList>
            </EditItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

...

Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating

    Dim ddl = CType(GridView1.Rows(e.RowIndex).Cells(1).FindControl("DropDownList1"), DropDownList)

End Sub
...