推 yukimir:非常謝謝你!現在刪除功能已經完全正常了 好感動┬︿┬ 06/15 11:52
嗯... 看了一陣子看到你的問題. 基本原因是不小心讓刪除動作連續做二次.
※ 引述《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)