<asp:GridView ID="GidTPE" runat="server" AutoGenerateColumns="false"  OnRowCommand="GidTPE_OnRowCommand" 
             DataKeyNames="UserID"  onrowdeleting="GidTPE_RowDeleting"  
            onrowdatabound="GidTPE_RowDataBound" Height="131px" Width="667px" 
             onrowediting="GidTPE_RowEditing" >   
           <asp:TemplateField HeaderText="Status">
               <ItemTemplate>
              
                  <asp:Label ID="LState"  Text='<%# Eval("Status") %>' runat="server"></asp:Label>
                   
               </ItemTemplate>
                <EditItemTemplate>
                  <asp:HiddenField  ID="HDFState" runat="server" Value='<%# Eval("State") %>' />
                 <asp:DropDownList ID="DDLStatus" runat="server"  >
                    </asp:DropDownList>
                </EditItemTemplate>
              
            </asp:TemplateField>  
cs:
   
        protected void GidTPE_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
               
                    DropDownList ddlState = (DropDownList)e.Row.FindControl("DDLStatus");
                    DataSet DTState = new DataSet();
                    DTState = bllum.GetListByUserState("");                    ddlState.DataSource = DTState; // 出错:未将对象引用设置到对象的实例                      ddlState.DataValueField = DTState.Tables[0].Columns[0].ColumnName;
                    ddlState.DataTextField = DTState.Tables[0].Columns[1].ColumnName;
                    ddlState.DataBind();
                    ddlState.SelectedValue = e.Row.FindControl("HDFState").ToString();
               
    
                
            }请懂的人帮忙看看呀,谢啦~~~~

解决方案 »

  1.   

    好像不可以直接绑定的 DropDownList ddlxModel = e.Row.FindControl("ddlModel") as DropDownList;
    FindControl之后,可以给模板列的下拉添加项
                for (int i = 0; i < ddlModel.Items.Count; i++)
                {
                    ddlxModel.Items.Add(new ListItem(ddlModel.Items[i].Text, ddlModel.Items[i].Value));
                }
      

  2.   

    写在GidTPE_RowCreated事件里DropDownList ddlState = (DropDownList)e.Row.FindControl("DDLStatus");
    if(ddlState!=null)
    {
    ddlState.DataSource = DTState.Tables[0];
    ddlState.DataValueField = DTState.Tables[0].Columns[0].ColumnName;
    ddlState.DataTextField = DTState.Tables[0].Columns[1].ColumnName;
    ddlState.DataBind();//ddlState.SelectedValue = e.Row.FindControl("HDFState").ToString();  //这句写错了,先转换控件,再取value
    }
      

  3.   

    忘结贴了,想起后来自己搞定了,应该写在 protected void GidTPE_RowEditing(object sender, GridViewEditEventArgs e) 里 加上GidTPE.EditIndex = e.NewEditIndex;