日期:2014-05-18  浏览次数:20446 次

GridView和DropDownList的问题。会的来看看啊。(急救!)
GridView 进入编辑状态 的时候 编辑模板里有一个 下拉列表框  
C# code

<asp:TemplateField HeaderText="类别">
                            <EditItemTemplate>
                                <asp:DropDownList ID="Class1"  Width="60px" runat="server">
                                </asp:DropDownList>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="Label4" Width=80px runat="server" Text='<%# Bind("ClassName") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>


更新的时候在根据选择的 DataValueField 进行操作
现在想完成 进入编辑状态的时候 根据原来数据库的值 预先选择好 SelectedIndex
看了一些资料。
现在后台代码如下。
C# code
 protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        GridView1.EditIndex = e.NewEditIndex;
        GridView1.DataSourceID = SqlDataSource1.ID;
        GridView1.DataBind();
        DropDownList dl = (DropDownList)GridView1.Rows[e.NewEditIndex].FindControl("Class1");
        string Cid = GridView1.DataKeys[e.NewEditIndex].Values[1].ToString();
        dl.DataSourceID = SqlDataSource2.ID;
        dl.DataTextField = "Name";
        dl.DataValueField = "Id";
        dl.DataBind();
        ListItem list = dl.Items.FindByValue(Cid);
        list.Selected = true;
        int i = dl.SelectedIndex;

    }

调试的时候已经可以看到 dl.SelectedIndex 有值了。
但是在页面上点击 下拉列表框的时候 出现很长列表。但是里边什么都没有。如图:

有没有知道的 ,给解答下。。。很费解。。。。头都大了。

------解决方案--------------------
放到
if (!IsPostBack)
{
...
}
------解决方案--------------------
在Page_Load加
if (!IsPostBack) 

GridView1.EditIndex = e.NewEditIndex;
GridView1.DataSourceID = SqlDataSource1.ID;
GridView1.DataBind();
DropDownList dl = (DropDownList)GridView1.Rows[e.NewEditIndex].FindControl("Class1");
string Cid = GridView1.DataKeys[e.NewEditIndex].Values[1].ToString();
dl.DataSourceID = SqlDataSource2.ID;
dl.DataTextField = "Name";
dl.DataValueField = "Id";
dl.DataBind();
ListItem list = dl.Items.FindByValue(Cid);
list.Selected = true;
int i = dl.SelectedIndex;
}
------解决方案--------------------
DropDownList dl = (DropDownList)GridView1.Rows[e.NewEditIndex].FindControl("Class1");
string Cid = GridView1.DataKeys[e.NewEditIndex].Values[1].ToString();
dl.DataSourceID = SqlDataSource2.ID;
dl.DataTextField = "Name";
dl.DataValueField = "Id";
dl.DataBind();

把对下拉列表框的绑定放在RowDataBound事件中
------解决方案--------------------
看这个:
http://blog.csdn.net/insus/archive/2008/03/26/2221260.aspx