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

在datagrid中实现批量删除时出现:未将对象引用设置到对象的实例解决办法

2012-02-19 
在datagrid中实现批量删除时出现:未将对象引用设置到对象的实例弄了一个通宵还是没搞好以下是代码,当我点c

在datagrid中实现批量删除时出现:未将对象引用设置到对象的实例
弄了一个通宵还是没搞好
以下是代码,当我点checkbox并点击删除按钮的时候。出现错误提示:未将对象引用设置到对象的实例
以下是代码
CS:

C# code
using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Drawing;using System.Web;using System.Web.SessionState;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.HtmlControls;namespace CHINAESL.News{    /// <summary>    /// Manage 的摘要说明。    /// </summary>    public partial class Manage : System.Web.UI.Page    {        public DataSet ds=new DataSet ();//将DataSet实例化                        protected void Page_Load(object sender, System.EventArgs e)        {                if(Session["UserName"].ToString().Equals("worldlink"))            {                ds = Socut.Data.ExecuteDataSet("SELECT * FROM socut_news ORDER BY n_time DESC","TableName");                DataGrid1.DataSource =ds;//设置数据源                DataGrid1.DataBind ();//绑定数据                }            else            {                                           Response.Write("<script language=javascript>alert('此页面无效,请返回!')</script>");                Response.Write("<script language=javascript>window.location.href='/CHINAESL/default.aspx'</script>");                        }        }        #region Web 窗体设计器生成的代码        override protected void OnInit(EventArgs e)        {            //            // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。            //            InitializeComponent();            base.OnInit(e);        }                /// <summary>        /// 设计器支持所需的方法 - 不要使用代码编辑器修改        /// 此方法的内容。        /// </summary>        private void InitializeComponent()        {                this.DataGrid1.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.DataGrid1_PageIndexChanged);        }        #endregion        private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)        {            DataGrid1.CurrentPageIndex = e.NewPageIndex;            DataBind();         }        protected void LinkButton1_OnClick(object sender, EventArgs e)        {            {                for (int i = 0; i < DataGrid1.Items.Count; i++)                {                    CheckBox mychk = (CheckBox)DataGrid1.Items[i].FindControl("Item");                    if (mychk.Checked == true)                    {                        string myid = Request.Form["Item"];                        Socut.Data.ExecuteDataSet("DELETE FROM socut_news WHERE n_id='" + myid + "'");                    }                }            }        }}}

aspx:
HTML code
<%@ Page language="c#" Inherits="CHINAESL.News.Manage" CodeFile="Manage.aspx.cs" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ><HTML>    <HEAD>        <title>Manage</title>        <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">        <meta name="CODE_LANGUAGE" Content="C#">        <meta name="vs_defaultClientScript" content="JavaScript">        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">    </HEAD><script type="text/javascript">    function SelectAll(tempControl)    {      var theBox=tempControl;      xState=theBox.checked;      elem=theBox.form.elements;      for(i=0;i<elem.length;i++)      {        if(elem[i].type=="checkbox" && elem[i].id!=theBox.id)        {          if(elem[i].checked!=xState)          {            elem[i].click();          }        }      }    }</script>    <body>        <form id="Form1" method="post" runat="server">            <table cellSpacing="1" cellPadding="5" width="780" align="center" bgColor="#cccccc" border="0">                <tr>                    <td align="center" width="788" bgColor="#ffffff" height="150">网站顶部</td>                </tr>            </table>            <table cellSpacing="1" cellPadding="5" width="780" align="center" bgColor="#cccccc" border="0">                <tr bgColor="#ffffff">                    <td width="177" height="200" style="WIDTH: 177px"><FONT face="宋体">                            <P><BR>                        </FONT><FONT face="宋体"></FONT>&nbsp;                    </td>                    <td vAlign="top" rowSpan="2"><asp:datagrid id="DataGrid1" runat="server" AutoGenerateColumns="False" Height="120px" Width="575px"                            PageSize="15" AllowPaging="True">                            <Columns>                                <asp:TemplateColumn HeaderText="求职信息:">                                    <ItemTemplate>                                    <input name="Item" type="checkbox" value=<%#DataBinder.Eval(Container.DataItem,"n_id")%>>                                        <a href='edit.aspx?id=<%#DataBinder.Eval(Container.DataItem,"n_id")%>' target="">                                            编辑</a>·<a href='view.aspx?id=<%#DataBinder.Eval(Container.DataItem,"n_id")%>' target=_blank><%#DataBinder.Eval(Container.DataItem, "n_title")%></a>                                    </ItemTemplate>                                </asp:TemplateColumn>                            </Columns>                            <PagerStyle Font-Size="X-Small" Font-Names="Tahoma" HorizontalAlign="Center" ForeColor="#333399"                                BackColor="#66FF99" Mode="NumericPages"></PagerStyle>                        </asp:datagrid>                        <input id="checkall" type="checkbox" Onclick="javascript:SelectAll(this);" name="allcheck"/>                        <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_OnClick">DelSelected</asp:LinkButton></td>                </tr>                <tr bgColor="#ffffff">                    <td height="200" style="WIDTH: 179px">文章统计</td>                </tr>            </table>            <table cellSpacing="1" cellPadding="5" width="780" align="center" bgColor="#cccccc" border="0">                <tr>                    <td align="center" width="788" bgColor="#ffffff" height="150">网站底部</td>                </tr>            </table>        </form>    </body></HTML> 



[解决办法]
for (int i = 0; i < DataGrid1.Items.Count; i++)
{
CheckBox mychk = (CheckBox)DataGrid1.Items[i].FindControl("Item");
if (mychk.Checked == true)
{
string myid = Request.Form["Item"];
Socut.Data.ExecuteDataSet("DELETE FROM socut_news WHERE n_id='" + myid + "'");
}
}


好好看看这段代码是不是有问题?

CheckBox确实被Find了么?Request.From里面确实有你指定的值么?

用这些值之前最好先判断是否为null。
[解决办法]
<input name="Item" type="checkbox" value=<%#DataBinder.Eval(Container.DataItem,"n_id")%>>
给他加个runat="server"和id="Item"变成
<input name="Item" runat="server" 和id="Item" type="checkbox" value=<%#DataBinder.Eval(Container.DataItem,"n_id")%>>

若在找不到把这句CheckBox mychk = (CheckBox)DataGrid1.Items[i].FindControl("Item");改成CheckBox mychk = (CheckBox)DataGrid1.Items[i].cells[0].FindControl("Item");

[解决办法]
<asp:TemplateColumn HeaderText="求职信息:">
<ItemTemplate>
<input name="Item" type="checkbox" value=<%#DataBinder.Eval(Container.DataItem,"n_id")%>>

1.该input是客户端控件,在后台找不到,可以改用服务器控件checkbox,
2.CheckBox mychk = (CheckBox)DataGrid1.Items[i].FindControl("Item");,在找模板列中控件时定位到列,用DataGrid1.Items[i].cells[0].FindControl("Item");
[解决办法]
<input name="Item" runat="server" type="checkbox" value= <%#DataBinder.Eval(Container.DataItem,"n_id")%>>
或加上runat="server",这个你试试,我没试过,
[解决办法]
探讨
首先 <input id="Item" type="checkbox" value= <%#DataBinder.Eval(Container.DataItem,"n_id")%> runat="server"> 
for (int i = 0; i < DataGrid1.Items.Count; i++) 

//CheckBox mychk = (CheckBox)DataGrid1.Items[i].FindControl("Item"); 
HTMLControl.Input(应该是这个,我比较少用,记不清楚了) mychk=(HTMLControl.Input)DataGrid1.Items[i].FindContr…

热点排行