作者yauhh (姚呵呵)
看板Visual_Basic
标题Re: [.NET] datagrid删除资料的问题
时间Sun Jun 15 04:17:22 2008
嗯... 看了一阵子看到你的问题. 基本原因是不小心让删除动作连续做二次.
※ 引述《yukimir (小环)》之铭言:
: Protected Sub dg_DeleteCommand(ByVal source As Object, ByVal e As
: System.Web.UI.WebControls.DataGridCommandEventArgs) Handles dg.DeleteCommand
: Dim con As OleDbConnection
: Dim com As OleDbCommand
: Dim provider = "provider=microsoft.jet.oledb.4.0"
: Dim database = "data source=" & Server.MapPath("db2.mdb")
: con = New OleDbConnection(provider & ";" & database)
: con.Open()
: com.CommandText = "delete from guest where 标题 =" &
: dg.DataKeys(e.Item.ItemIndex)
: com.ExecuteNonQuery()
: con.Close()
: data()
: End Sub
: </script>
: <html>
: <body>
: <form id="Form1" runat="server">
: <asp:datagrid id="dg" runat="server"
: headerstyle-backcolor="lightblue"
: headerstyle-forecolor="blue"
: bordercolor="#E7E7FF"
: cellpadding=3
: itemstyle-backcolor="yellow"
: horizontalalign="Center"
: oneditcommand="edit"
: onupdatecommand="upd"
: oncancelcommand="can"
: datakeyfield="标题"
: autogeneratecolumns="False" BackColor="White" BorderStyle="None"
: BorderWidth="1px" GridLines="Horizontal" Width="550px"
: OnDeleteCommand="dg_DeleteCommand">
你的程式先让 dg_DeleteCommand 处理 dg.DeleteCommand,
又指定 dg.OnDeleteCommand 为 dg_DeleteCommand 函式,
按下删除按钮,以上二方面都作用了,就执行二次删除命令.
所以,如果你要删除最下面一笔,debug时会告诉你 out of range,
是因为先删一次把最下面一笔删掉,再删一次时没了,列表长度已经比
e.Item.ItemIndex 还短了.
处理方法当然是把 Handles dg.DeleteCommand 删掉,
或者,把 OnDeleteCommand="dg_DeleteCommand" 删掉.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.231.66.251
※ 编辑: yauhh 来自: 61.231.66.251 (06/15 04:41)
1F:推 yukimir:非常谢谢你!现在删除功能已经完全正常了 好感动┬︿┬ 06/15 11:52