首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

Gridview中RadioButtonList联动中“未将对象引用设置到对象的实例”,该如何处理

2012-03-26 
Gridview中RadioButtonList联动中“未将对象引用设置到对象的实例”建站中,点击更新时怀疑RadioButtonList取

Gridview中RadioButtonList联动中“未将对象引用设置到对象的实例”
建站中,点击更新时怀疑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

HTML code
 <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> 


C# code
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();            }    }


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

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");
 
[解决办法]

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

热点排行