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