建站中,点击更新时怀疑RadioButtonList取值没成功,望各位大大帮忙看看
源错误: 
行 147:        {
行 148:            string id = e.CommandArgument.ToString();
行 149:            string audit = auditrbl.SelectedItem.Value.ToString();
行 150:            string level = levelrbl.SelectedItem.Value.ToString();
行 151:            string str = "UPDATE T_Member SET [F_Audit]=" + audit + ",[F_Level]=" + level + ";";源文件: j:\Sam‘s Work1\MemberMain.aspx.cs    行: 149 堆栈跟踪: 
[NullReferenceException: 未将对象引用设置到对象的实例。]
   MemberMain.GridView_RowCommand(Object sender, GridViewCommandEventArgs e) in j:\Sam‘s Work1\MemberMain.aspx.cs:149
   System.Web.UI.WebControls.GridView.OnRowCommand(GridViewCommandEventArgs e) +108
   System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +112
   System.Web.UI.WebControls.GridView.OnBubbleEvent(Object source, EventArgs e) +95
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
   System.Web.UI.WebControls.GridViewRow.OnBubbleEvent(Object source, EventArgs e) +123
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
   System.Web.UI.WebControls.Button.OnCommand(CommandEventArgs e) +118
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +166
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565 <asp:TemplateField HeaderText="审核状态">
                        <ItemTemplate>
                                <asp:Label ID="lblaudit" runat="server" Text='<%# Eval("F_Audit") %>' />
                        </ItemTemplate>
                        <EditItemTemplate>
                                <asp:RadioButtonList ID="AuditRBL" runat="server" RepeatDirection="Vertical" AutoPostBack="true" AppendDataBoundItems="true">
                                    <asp:ListItem Value="0" Text="未通过"></asp:ListItem>
                                    <asp:ListItem Value="1" Text="已通过"></asp:ListItem>
                                </asp:RadioButtonList>
                        </EditItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="级别">
                        <ItemTemplate>
                                <asp:Label  ID="lbllevel"  runat="server"  Text='<%# Eval("F_Level") %>' ></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                                <asp:RadioButtonList ID="LevelRBL" runat="server" RepeatDirection="Horizontal" AutoPostBack="true" AppendDataBoundItems="true">
                                    <asp:ListItem Value="0" Text="普通会员"></asp:ListItem>
                                    <asp:ListItem Value="1" Text="ViP"></asp:ListItem>
                                </asp:RadioButtonList>
                        </EditItemTemplate>
                    </asp:TemplateField>
protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            pagebind();
        }      
    }
    private void pagebind()
    {
        string str = "SELECT * FROM T_Member";
        DataSet ds = new DataSet();
        OleDbDataAdapter da = new OleDbDataAdapter(str, olecon);
        da.Fill(ds,"T_Member");
        rowCount = ds.Tables["T_Member"].Rows.Count;
        GridView1.DataSource = ds;
        GridView1.DataKeyNames = new string[]{"Member_ID"};
        GridView1.DataBind();
        olecon.Close();
    }
protected void GridView_RowDataBound(object sender,GridViewRowEventArgs e)
    {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
               numCount++;
               if (e.Row.RowIndex == GridView1.EditIndex)
               {
                   DataRowView rowItem = (DataRowView)e.Row.DataItem;
                   if (rowItem["Member_ID"] != DBNull.Value)
                   {                       RadioButtonList auditrbl = (RadioButtonList)e.Row.FindControl("AuditRBL");
                       auditrbl.SelectedIndex = (Convert.ToInt32(rowItem["F_Audit"]));
                   }
                   if (rowItem["Member_ID"] != DBNull.Value)
                   {                       RadioButtonList levelrbl = (RadioButtonList)e.Row.FindControl("LevelRBL");
                       levelrbl.SelectedIndex = (Convert.ToInt32(rowItem["F_Level"]));
                   }
               } 
            }
            if (e.Row.RowType == DataControlRowType.Footer)
            {
                int toLeft = TotalRowCount - numCount;
                int numCols = GridView1.Rows[0].Cells.Count;                for (int i = 0; i < toLeft; i++)
                {
                    GridViewRow row = new GridViewRow(-1, -1, DataControlRowType.EmptyDataRow, DataControlRowState.Normal);
                    for (int j = 0; j < numCols; j++)
                    {
                        TableCell cell = new TableCell();
                        cell.Text = "&nbsp;";
                        row.Cells.Add(cell);
                    }
                    GridView1.Controls[0].Controls.AddAt(numCount + 1 + i, row);
                }
            }
    }
protected void RowEditing(object sender,GridViewEditEventArgs e)
    {
        GridView1.EditIndex = e.NewEditIndex;
        pagebind();
    }
protected void GridView_RowCommand(object sender,GridViewCommandEventArgs e)
    {
        RadioButtonList auditrbl = (RadioButtonList)GridView1.FindControl("AuditRBL");
        RadioButtonList levelrbl = (RadioButtonList)GridView1.FindControl("LevelRBL");
        
        if (e.CommandName == "update")
        {
            string id = e.CommandArgument.ToString();
            string audit = auditrbl.SelectedItem.Value.ToString();
            string level = levelrbl.SelectedItem.Value.ToString();
            string str = "UPDATE T_Member SET [F_Audit]=" + audit + ",[F_Level]=" + level + ";";
            olecmd = new OleDbCommand(str, olecon);
            olecon.Open();
            olecmd.ExecuteNonQuery();
            olecon.Close();
            }
    }

解决方案 »

  1.   

    控件的id不一致,前台文件里定义的是AuditRBL,而代码里确是auditrbl
    字母大小写问题。
      

  2.   


    protected void GridView_RowCommand(object sender,GridViewCommandEventArgs e)
    {
            RadioButtonList auditrbl = (RadioButtonList)GridView1.FindControl("AuditRBL");
            RadioButtonList levelrbl = (RadioButtonList)GridView1.FindControl("LevelRBL");

       ...
    }--------------------------------------->红色部分改为RadioButtonList auditrbl = (RadioButtonList)e.Row.FindControl("AuditRBL");  
    RadioButtonList levelrbl = (RadioButtonList)e.Row.FindControl("LevelRBL");
     
      

  3.   

    e.Row.FindControl..在这个事件里没办法引用
      

  4.   


    给点击的按钮CommandName,CommandArgument比如:
    CommandName="Increase"
    CommandArgument="<%# ((GridViewRow) Container).RowIndex %>"   Command事件中
    if(e.CommandName=="Increase")
    {     
          int index = Convert.ToInt32(e.CommandArgument);
           
          GridViewRow row = ProductsGridView.Rows[index];
            
          RadioButtonList auditrbl = (RadioButtonList)row.FindControl("AuditRBL");   
          RadioButtonList levelrbl = (RadioButtonList)row.FindControl("LevelRBL");
     }
      

  5.   

    看看MSDN给的RowCommand的例子第一种第二种都可以http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowcommand.aspx
      

  6.   


    foreach (GridViewRow grow in GridView1.Rows)
    {
        RadioButtonList auditrbl = (RadioButtonList)(grow .FindControl("AuditRBL"));
    }