怎样设定gridview 的EditItemTemplate中dropdownlist的某一项被选定?
  <asp:TemplateField HeaderText="Department">
                    <ItemTemplate>
                        <asp:Label ID="Label2" runat="server" Text='<%# Eval("department") %>'></asp:Label>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:DropDownList ID="DropDownList2" runat="server" DataSource="<%# ddlDepartmentBind() %>" DataTextField="deptname" DataValueField="deptname" >
                        </asp:DropDownList>
                    </EditItemTemplate>
直接这样,每次点编辑的时候默认选定项都为第一项,如何才能重新设定它对应的默认选定项啊?

解决方案 »

  1.   

    你是说类似这样?
    <asp:DropDownList SelectedValue='<%# Bind("departmentId") %>' ... >
      

  2.   

    RowBound 事件中if(e.Row.RowState == DataControlRowState.Edit){
    DropDownList drp = e.Row.FindControl("DropDownList2");
    // 
    drp.SelectedValue = DataBinder.Eval(e.Row.DataItem, "department").ToString();
    }
      

  3.   

     <asp:TemplateField HeaderText="Department"> 
        <ItemTemplate> 
            <asp:Label ID="Label2" runat="server" Text=' <%# Eval("department") %>'> </asp:Label> 
        </ItemTemplate> 
        <EditItemTemplate> 
            <asp:DropDownList ID="DropDownList2" runat="server" DataSource=" <%# ddlDepartmentBind() %>" DataTextField="deptname" DataValueField="deptname" SelectedValue='<%# Bind("deptname") %>'
            </asp:DropDownList> 
        </EditItemTemplate> 
    </asp:TemplateField>
      

  4.   

    SelectedValue=' <%# Bind("deptname") %>'
      

  5.   

    DropDownList1.Items.FindByText(你要选中的值).selected=true
    DropDownList1.Items.FindByvalue(你要选中的值).selected=true
    上面各位说的都行,我这个也行,就看个人的习惯
      

  6.   

    rowdataBound 事件中 if(e.Row.RowState == DataControlRowState.Edit){ 
    DropDownList drp = e.Row.FindControl("DropDownList2"); 
    // 
    drp.SelectedValue = DataBinder.Eval(e.Row.DataItem, "department").ToString(); 

    为什么,偶数行记录就无效啊,默认选定项仍然为第一项目.?????????????????
      

  7.   

    rowdataBound 事件中 
    加上这句
    drp.SelectedValue = ((Label)e.Row.FindControl("Label2")).Text;
      

  8.   


    这样当然会报错哦。 DataControlRowState为 edit
      

  9.   

    rowdatabound 难道只对偶数行记录有效吗?
      

  10.   

    rowdatabound 难道只对奇数行记录有效吗?
      

  11.   

    GridView1_RowDataBound:
    if (((DropDownList)e.Row.FindControl("DDLXueli")) != null)
            {
                DropDownList ddlxueli = (DropDownList)e.Row.FindControl("DDLXueli");            //  生成 DropDownList 的值,绑定数据
                string connStr = System.Configuration.ConfigurationSettings.AppSettings["lj"];
                string SqlStr = "SELECT * from xueli";
                DataSet ds = new DataSet();            SqlConnection conn = new SqlConnection(connStr);
                if (conn.State.ToString() == "Closed") conn.Open();
                SqlDataAdapter da = new SqlDataAdapter(SqlStr, conn);
                da.Fill(ds, "xueli");
                if (conn.State.ToString() == "Open") conn.Close();            ddlxueli.DataSource = ds.Tables[0].DefaultView;
                ddlxueli.DataTextField = "description";
                ddlxueli.DataValueField = "code";
                ddlxueli.DataBind();
                //            //  选中 DropDownList
                ddlxueli.SelectedValue = ((HiddenField)e.Row.FindControl("HDFXueli")).Value;
                //
            }页面:
    <asp:TemplateField HeaderText="学历">
                                        <ItemTemplate>
                                            <%# Eval("description")%>
                                        </ItemTemplate>
                                        <EditItemTemplate>
                                            <asp:HiddenField ID="HDFXueli" runat="server" Value='<%# Eval("xueli") %>' />
                                            <asp:DropDownList ID="DDLXueli" runat="server" Width="90px" />
                                        </EditItemTemplate>
                                        <ItemStyle Width="100px" />
                                    </asp:TemplateField>
      

  12.   

    我顶它个肺 ,为什么
     SelectedValue='<%# Bind("department") %>'> 这样就可以完全实现。而,在rowdatabound中
      if(e.Row.RowState == DataControlRowState.Edit)

    DropDownList drp = e.Row.FindControl("DropDownList2"); 
    // 
    drp.SelectedValue = DataBinder.Eval(e.Row.DataItem, "department").ToString(); 

    这样写就不行呢。rowdatabound事件只能对 奇数行记录有效吗? ??
      

  13.   

    在rowdatabound 中怎么不行啊?
      

  14.   

    这么没有毅力啊,居然结贴了,不知解决了没有,我的解决方案:不设selectedvalue值,
    在DropDownList的第一个位置上添加要作为selectedvalue的值就可以实现你的功能了
    c#代码:
    if ((e.Row.RowState & DataControlRowState.Edit) == DataControlRowState.Edit)
            {
                DropDownList ddl = (DropDownList)e.Row.FindControl("ddlzc");
                //ddl.SelectedValue = DataBinder.Eval(e.Row.DataItem, "zname").ToString();
                string temp = DataBinder.Eval(e.Row.DataItem, "zname").ToString(); 
                string sqlText = "select * from zhicheng";
                OleDbConnection conn = getCon();
                OleDbDataAdapter da = new OleDbDataAdapter(sqlText, conn);
                DataSet ds = new DataSet();
                conn.Open();
                da.Fill(ds, "zhicheng");
                //在0位置添加想要的值
                ds.Tables[0].Rows.Add(new object[] { 0, temp });
                DataView dv = ds.Tables[0].DefaultView;
                //ViewState["docstr"] = ds.Tables[0].Rows[0]["dname"].ToString();        
                dv.Sort = "zid";
                ddl.DataSource = dv;
                ddl.DataValueField = "zid";
                ddl.DataTextField = "zname";
                ddl.DataBind();            
                conn.Close();
                conn.Dispose();
            }
      

  15.   

    偶数行的问题是因为
    if(e.Row.RowState == DataControlRowState.Edit)
    这个判断有问题,e.Row.RowState 是DataControlRowState 值的按位组合,偶数行的状态是:DataControlRowState.Edit|DataControlRowState.Alternate
    改成下面这个表达式来判断就可以了
    if ((e.Row.RowState & DataControlRowState.Edit) > 0)