在编辑RowEditing中如何实例化DropDownList?
 直接写
DropDownList ddl=(DropDownList)GridView1.FindControl("DropDownList1");DropDownList DDL1 = (DropDownList)GVW_ShowCard.Rows[e.NewEditIndex].Cells[5].FindControl("DropDownList1");
上面二种写法都不行,但是下面却能取到相应的值,为什么啊?
string strValue = ((HtmlInputHidden)GVW_ShowCard.Rows[e.NewEditIndex].Cells[2].FindControl("Hid1")).Value;
大家是如何写的呢?帮小弟一下吧,谢谢了!:)

解决方案 »

  1.   

    DropDownList只是在EditItemTemplate中存在的,在ItemTemplate中只是一个Lable,是不是这个原因才为出错呢?向各位大侠请教了!~~
      

  2.   

    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
    GridViewRow gvr = GridView1.Rows[e.NewEditIndex];
    DropDownList ddl = (DropDownList)gvr.Cells[你DropDownList放在列的索引].Controls[0];
    string str=ddl.SelectItem.Text;
    }
    //Controls[0]代表单元格中的控件的索引,0代表第一个控件
      

  3.   

    谢谢LS的了,照楼上写的出了一点问题:无法将类型为“System.Web.UI.LiteralControl”的对象强制转换为类型“System.Web.UI.WebControls.DropDownList”。  protected void GVW_ShowCard_RowEditing(object sender, GridViewEditEventArgs e)
        {
            
            GVW_ShowCard.EditIndex = e.NewEditIndex;
            GridViewRow grv = GVW_ShowCard.Rows[e.NewEditIndex];
            DropDownList DDL1 = (DropDownList)grv.Cells[5].Controls[0];//提示这里出错
            DDL1.Items.Add(new ListItem("EMS", "1"));//想从表中读取想应的值赋给它
            BindCard();
        }想用户点击编辑后在RowEditing中取得相应ID值,在数据库中查找相应的值然后给DropDownList赋值,这种如何做的呢?虚心请教了:!)
      

  4.   

    参考以下代码:    protected void ddlDispOrder_DataBound(object sender, EventArgs e)
        {
            DropDownList ddl = (DropDownList)sender;
            for (int i=0; i<= 999; i++)
            {
                ddl.Items.Add(new ListItem(i.ToString(), i.ToString()));
            }
            GridViewRow det = (GridViewRow)ddl.NamingContainer;
            ddl.SelectedValue = ((DataRowView)det.DataItem)["DispOrder"].ToString();
        }
        protected void gvResume_JobList_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
           if (Page.IsValid)
          {
                string strDispOrder = ((DropDownList)((GridView)sender).Rows[e.RowIndex].FindControl("ddlDispOrder")).SelectedValue;
                e.NewValues["DispOrder"] = strDispOrder;
         }
        }
      

  5.   

    不好意思 失误! 应该是写在更新事件中:
    protected void GridView3_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
      GridViewRow gvr = GridView3.Rows[e.RowIndex];
            Button btn = (Button)gvr.Cells[2].FindControl("Button2");
            string str=btn.Text;
            Response.Write(str);
    }
      

  6.   

    实例化应该写在RowDataBound事件里而不是RowEditing事件里吧
      if (((DropDownList)e.Row.FindControl("ddlLb")) != null)
            {
                DropDownList ddlLb = (DropDownList)e.Row.FindControl("ddlLb");
                dbm_lb_dal dallb = new dbm_lb_dal();
                DataTable dtLb;
                dtLb = dallb.GetList("");
                ddlLb.Items.Clear();
                ddlLb.DataSource = dtLb;
                ddlLb.DataTextField = "LBMC";
                ddlLb.DataValueField = "LBID";
                ddlLb.DataBind();
                ddlLb.Items.Insert(0, new ListItem("", ""));
                ddlLb.Items.FindByText(dtLb.Rows[0]["LBMC"].ToString()).Selected = true;
               
                dtLb = null;
                dallb = null;
               
            }在RowUpdating事件里取值
      string Lbmc = ((DropDownList)gdvXl.Rows[e.RowIndex].FindControl("ddlLb")).SelectedItem.Text;
      

  7.   

    同意zwwlovezy1(Eminem)
    editing和updating不是一样的哦,前者是编辑状态的激活,后者是编辑确认即更新数据
      

  8.   

    谢谢大家,我已改到RowDataBound里面了,可以了,再一次谢谢
    看来在RowEditing真不好取值啊,hehe
      

  9.   

    在ShowCard_RowEditing事件中可以取值
    DropDownList ddl=(DropDownList)grdType.Rows[e.NewEditIndex].FindControl("DropDownList1");
    string ddlValue= ddl.SelectedValue.ToString().Trim();