在GridView asp.net中将数据绑定到DropDownList

时间:2012-10-25 07:44:50

标签: asp.net

我有一个带有GridView的网页表单和GridView中的一些控件。我在gridview的EdtItemTemplate中有一个DropDownList。

我需要将此DropDownList与我的CodeBehind文件中的某个方法绑定,该方法返回一个LisItems类型的数组。

我面临的问题是这个。由于Control位于EditItemTemplate中,使用FindControl(“MyControlID”)似乎在任何GridView事件中都不起作用,它返回null,换句话说它似乎无法找到控件,除非我使用OnRowUpdating事件,但我无法使用此事件,因为Control需要在此之前进行数据绑定。

无论如何我可以使用<%#Bind(“MyMethodName”)%>绑定控件?

3 个答案:

答案 0 :(得分:0)

试试这个

在App_Code中创建一类数据,像这样

public static class Fruits
{
    public static List<string> GetFruits()
    {
        return new string[] { "Apple", "Mango", "Banana", "Grapes" }.ToList();
    }
}

在您的网页上添加一个网格,我猜您已经准备好了

<asp:GridView runat="server" ID="grid" AutoGenerateColumns="false" OnRowEditing="grid_RowEditing">
        <Columns>
            <asp:TemplateField HeaderText="Selected Fruit">
                <ItemTemplate>
                    <asp:Label runat="server" ID="Fruit" Text='<%# Eval("Fruits") %>' />
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:DropDownList runat="server" ID="fruits" DataSourceID="fruitsDS" />
                </EditItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Edit">
                <ItemTemplate>
                    <asp:Button runat="server" ID="btnEdit" Text="Edit" CommandName="Edit" />
            </ItemTemplate>
      </asp:TemplateField>
    </Columns>
</asp:GridView>

添加一个Object Datasource来绑定你的DropDowns编辑模板

<asp:ObjectDataSource ID="fruitsDS" runat="server" SelectMethod="GetFruits" TypeName="Fruits" />

希望这可以提供帮助。

答案 1 :(得分:0)

试试这个

protected void RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowState == DataControlRowState.Edit)
    {
        DropDownList dl = (DropDownList)e.Row.FindControl("myList");
        dl.DataSource = new string[] { "A", "B" };
        dl.DataBind();
    }
}

答案 2 :(得分:0)

gridview rowdatabound将用于bind the data to dropdown in gridview.

DropDownList ddl =(DropDownList)e.Row.FindControl(“ddlcity”);         ddl.DataSource = s;