在GridView中的运行时添加并找到Dropdownlist

时间:2015-05-04 06:21:42

标签: c# asp.net gridview

在我的asp.net应用程序中,我使用了Gridview控件,其中我必须在运行时为每个单元格添加Dropdownlist。我能够成功绑定。 下面是我在行数据绑定事件中的代码,

foreach (GridViewRow row in gdvLocation.Rows) {
    if (row.RowType == DataControlRowType.DataRow) {
        for (int i = 1; i < row.Cells.Count; i++) {
            var dlRouteType = new DropDownList();
            dlRouteType.ID = "ddlRouteType";
            dlRouteType.DataSource = GetRouteTypeList();
            dlRouteType.DataTextField = "RouteType";
            dlRouteType.DataValueField = "Id";
            dlRouteType.DataBind();
            row.Cells[i].Controls.Add(dlRouteType);
        }
    }
}

我的页面中有一个按钮,它具有将数据保存到数据库的功能。在保存数据的同时,我必须传递我在运行时添加的Dropdownlist中的值。在按钮上单击我正在编写以下代码以从下拉列表中获取数据,

var ddlDropDown = (DropDownList)row.Cells[i].FindControl("ddlRouteType");

但是我在ddlDropDown对象中得到null。我甚至在aspx页面中添加了Update面板。任何建议都是最受欢迎的。 提前致谢 桑杰塔

1 个答案:

答案 0 :(得分:0)

您的代码中存在这些错误

  1. RowDataBound已遍历每一行,因此您无需在顶部写foreach
  2. 您正在从索引1迭代,索引从零开始。所以从零开始。
  3. DropDownList ID必须是唯一的,因此最好写一些类似dlRouteType.ID = "ddlRouteType_" + i;
  4. 的内容

    代码应为,

    protected void gdvLocation_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        //removed the foreach loop
        var row = e.Row;
        if (row.RowType == DataControlRowType.DataRow)
        {
            for (int i = 0; i < row.Cells.Count; i++) //changed index
            {
                var dlRouteType = new DropDownList();
                dlRouteType.ID = "ddlRouteType_" + i; //gave unique id
                dlRouteType.DataSource = GetRouteTypeList();
                dlRouteType.DataTextField = "RouteType";
                dlRouteType.DataValueField = "Id";
                dlRouteType.DataBind();
                row.Cells[i].Controls.Add(dlRouteType);
            }
        }
    }