**********************************高分求解:“未将对象引用设置到对象的实例”*************************************************

thbird 2004-10-26 09:09:38

这是一个关于dataGrid 的ButtonColumn列的问题。我在dataGrid 最后一列做了个删除列,删除时有时会出现“未将对象引用设置到对象的实例”的错误提示,代码如下:


// 数据接连和绑定:
------------------------------------------------------------------
Dim strSql As String = "select * from a1"
Dim strDsn As String = "Persist Security Info=False;User ID=sa;Initial Catalog=aaa;Data Source=localhost"
Dim Dt As New DataTable
Dim dr As DataRow
Dim Conn As SqlConnection
Dim Da As SqlDataAdapter
Dim keys(1) As DataColumn

Sub BindGrid()
Conn = New SqlConnection(strDsn)
Da = New SqlDataAdapter(strSql, Conn)
Da.Fill(Dt)
Grid.DataSource = Dt
Grid.DataBind()
End Sub

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not IsPostBack Then
BindGrid()
End If
End Sub
-------------------------------------------------------------------------
//当我单出删除列的“删除”连接时,有时可以正常删除,但有时会出现错误提示
Private Sub Grid_DeleteCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles Grid.DeleteCommand
Conn = New SqlConnection(strDsn)
Da = New SqlDataAdapter(strSql, Conn)
Da.Fill(Dt)
Keys(0) = Dt.Columns(0)
Dt.PrimaryKey = Keys
dr = Dt.Rows.Find(e.Item.ItemIndex )
dr.Delete() //就是这一行,错误提示: “未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。 ”
Dim cb As SqlCommandBuilder = New SqlCommandBuilder(Da)
Da.Update(Dt)
BindGrid()
End Sub

希望今天能结贴!
...全文
189 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
jblcj 2004-10-26
  • 打赏
  • 举报
回复
我以前也遇到过这个问题,结果是要找的那条数据根本就没有查找到
thbird 2004-10-26
  • 打赏
  • 举报
回复
结贴~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!
brightheroes 2004-10-26
  • 打赏
  • 举报
回复
这样是可以的
当然你可以在设计的页面进行设置
在Grid的属性中有这么一个选项
你要确定你的表的主键是ID
thbird 2004-10-26
  • 打赏
  • 举报
回复
再请教brightheroes,Eddie005:设置DataGrid的DataKeyField,是不是只要在<asp:datagrid runat="server" DataKeyField="id"> 中设置就行了?还需要在代码中或其它地方设置吗?
wudixiaocaoren 2004-10-26
  • 打赏
  • 举报
回复
删除完马上重新绑定呀!
噯卟釋手 2004-10-26
  • 打赏
  • 举报
回复
没准是你要删除的某列没有值 在删除前先判断一下 是否真的有值 再删除
thbird 2004-10-26
  • 打赏
  • 举报
回复
谢谢各位,我先试试。
goody9807 2004-10-26
  • 打赏
  • 举报
回复
Dt.Columns(0)
是不存在的
Eddie005 2004-10-26
  • 打赏
  • 举报
回复
严重同意brightheroes(闭关|那一剑的风情) --- 还是举脚赞成~~
brightheroes 2004-10-26
  • 打赏
  • 举报
回复
建议你如下做:
1:设置DataGrid的DataKeyField为ID

2:删除语句如下:
string sql = "Delete from yourTable where id = " + yourDataGrid.DataKey[e.Item.ItemIndex].ToString();
SqlCommand com = new SqlCommand(sql,yourConnection);
com.ExecuteNonQuary();
..........

BindyourDataGrid();
wbj02 2004-10-26
  • 打赏
  • 举报
回复
可能是找不到删除的那一行。dataGrid的datakeys绑定了没有?
顺便把删除那一部分代码写出来啊。看不到我们怎么知道哪里错了。
brightheroes 2004-10-26
  • 打赏
  • 举报
回复
删除的时候,为什么要读取一遍数据呢?
为什么要用SqlAdapter?
SqlCommand也可以执行SQL语句的

此外:
Dt.Columns(0)
是不存在的,因为你页面Postback,这个变量早就丢失了!
当然要报空引用的异常
tnt8csdn2000 2004-10-26
  • 打赏
  • 举报
回复
Da.Fill(Dt)
数据源需要重新绑定
cansum396 2004-10-26
  • 打赏
  • 举报
回复
删除列的代码贴出来
no820824 2004-10-26
  • 打赏
  • 举报
回复
对象没有被实例化嘛..
einsteincao 2004-10-26
  • 打赏
  • 举报
回复
声明connection 的时候不要放在Sub BindGrid()里 否则每次都会新声明一次,而以前的并没有释放

解决方法:

Sub BindGrid()
Conn = New SqlConnection(strDsn)
Da = New SqlDataAdapter(strSql, Conn)
Da.Fill(Dt)
Grid.DataSource = Dt
Grid.DataBind()
End Sub

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not IsPostBack Then
Conn = New SqlConnection(strDsn)
Da = New SqlDataAdapter(strSql, Conn)
BindGrid()
End If
End Sub
luoyankun0216 2004-10-26
  • 打赏
  • 举报
回复
估计可能是因为删除的时候没有找到该行,或者是你刚刚删除过^
帮你UP

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧