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
<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 = " "; 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(); } }
红色部分改为
RadioButtonList auditrbl = (RadioButtonList)e.Row.FindControl("AuditRBL");
RadioButtonList levelrbl = (RadioButtonList)e.Row.FindControl("LevelRBL");
[解决办法]
foreach (GridViewRow grow in GridView1.Rows){ RadioButtonList auditrbl = (RadioButtonList)(grow .FindControl("AuditRBL"));}