请问我使用gridview dropdownlist 动态增加行没有问题,但是当我选取下拉列表的值以后,我再增加一行,下拉列表的值全部恢复为默认状态值,前台dropdownlist的代码:<asp:TemplateField HeaderText="单位">
                        <ItemTemplate>
                            <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True">
                            </asp:DropDownList>
                        </ItemTemplate>
                    </asp:TemplateField>
后台绑定代码:
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            if (e.Row.FindControl("DropDownList1") != null)
            {
                string Sqldropdownlist = "SELECT * FROM units";
                DropDownList list = (DropDownList)e.Row.FindControl("DropDownList1");
                list.DataSource = shujuku.GetDataSet(Sqldropdownlist);
                list.DataTextField = "danwei";
                list.DataValueField = "id";
                list.DataBind();
                list.SelectedValue = DataBinder.Eval(e.Row.DataItem,"id").ToString();
                list.Items.Insert(0, new ListItem("请选择", "0"));
            }
        }
    }

解决方案 »

  1.   

    没太明白你的意思....你的DROPDOWNLIST的AUTOPOSTBACK为TRUE了那控件的TEXTCHANGED事件里没写东西????如果你不需要这个自动回传  就把AUTOPOSTBACK改为FALSE
      

  2.   

    列表里的值我是从数据库里读取出来的,我动态增加的行中只要选中相应的值就行,所以后台没有写相应的事件,当我编辑完所有行后点保存就可以全部保存到数据库,另外动态增加的行里还有文本框控件,这些文本框控件我输入值后,再动态增加行,其值可以保存不变,问题就在于下拉列表的值当我再次增加动态行时,其值全部恢复到默认值去了,我在aspx页面的dropdownlist里增加SelectedValue='<%# DataBinder.Eval(Container.DataItem, "单位")%>,用来保存刷新状态前的下拉列表值,但是运行就报DropDownList”有一个无效 SelectedValue,因为它不在项目列表中错误.
      

  3.   

    保存不了值,是因为你每次新增行是,都会重新绑定一次GridView,也就是会再次执行GridView1_RowDataBound事件,事件里面的DropDownList就会重新绑定,所以建议你在每次新增行后,把DropDownList的值保存下来,存放在ViewState里面,下次绑定DropDownList的时候,就看ViewState里面是否有对应的值,有就赋值给DropDownList的SelectValue属性上,只是说了实现方法,具体代码实现,请自行处理。
      

  4.   

    你用ajax实现,就不会出现你说的情况了
      

  5.   

    你的页面POSTBACK之后,DROPDOWNLIST如果不重新绑的话当然没办法保存先前的值跟楼上说的一样,不过没见过你代码,你最好看一下在DATABOUND之后最好再绑一次DROPDOWNLIST的值!