Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 使用GridView删除记录_Asp.net_Vb.net - Fatal编程技术网

Asp.net 使用GridView删除记录

Asp.net 使用GridView删除记录,asp.net,vb.net,Asp.net,Vb.net,我在删除记录时遇到了一些问题。我使用VB.net和Access数据库。当我尝试运行这个程序时,并没有出现错误,但数据库中的记录并没有被删除。有一个类要删除记录,该类将调用另一个方法,即call DeleteMultipleRecords。这是我的代码,希望有人能帮我解决这个问题 -Default.aspx.vb- Protected Sub btnDelete_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnDelet

我在删除记录时遇到了一些问题。我使用VB.net和Access数据库。当我尝试运行这个程序时,并没有出现错误,但数据库中的记录并没有被删除。有一个类要删除记录,该类将调用另一个方法,即call DeleteMultipleRecords。这是我的代码,希望有人能帮我解决这个问题

-Default.aspx.vb-

Protected Sub btnDelete_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnDelete.Click
    'create string collection to store IDs of records to be deleted
    Dim idCollection As New StringCollection()
    Dim strID As String = String.Empty
    'Loop through GridView rows to find checked rows 
    For i As Integer = 0 To i < GridView1.Rows.Count - 1
        Dim chkDelete As CheckBox = DirectCast(GridView1.Rows(i).Cells(0).FindControl("chkSelect"), CheckBox)
        If chkDelete IsNot Nothing Then
            If chkDelete.Checked Then

                strID = GridView1.Rows(i).Cells(1).Text
                idCollection.Add(strID)

            End If
        End If
    Next

    'called method to delete record
    DeleteMultipleRecords(idCollection)

    'rebind(GridView)
    GridView1.DataBind()
End Sub
Private Sub DeleteMultipleRecords(ByVal idCollection As StringCollection)
    'create connection
    Dim cnnOLEDB As New OleDbConnection(strConnection)
    Dim IDs As String = ""

    'create string builder to store 
    'delete commands seperated by ;

    For Each id As String In idCollection

        IDs += id.ToString() & ","
    Next

    Try

        Dim strIDs As String = IDs.Substring(0, IDs.LastIndexOf(""))
        Dim strSql As String = ("Delete from Details WHERE ID = '" & strIDs & "' ")

        cmdOLEDB.CommandType = CommandType.Text
        cmdOLEDB.CommandText = strSql
        cmdOLEDB.Connection = cnnOLEDB
        cnnOLEDB.Open()
        cmdOLEDB.ExecuteNonQuery()
        cmdOLEDB.Dispose()

    Catch ex As OleDbException

        Dim errorMsg As String = "Error in Deletion"
        errorMsg += ex.Message
        Throw New Exception(errorMsg)

    Finally
        cnnOLEDB.Close()
    End Try

End Sub
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
        DataSourceID="SqlDataSource1" AutoGenerateColumns="False" DataKeyNames="ID">
        <Columns>
        <asp:TemplateField HeaderText="Select">
<ItemTemplate>

<asp:CheckBox ID="chkSelect" runat="server" />
</ItemTemplate>
 </asp:TemplateField>
<asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID"/>

<asp:TemplateField HeaderText="Name" 
                   SortExpression="Name">
<ItemTemplate>
<asp:TextBox ID="txtName" runat="server" 
             Text='<%# Bind("Name") %>'  ReadOnly="true" 
             BorderStyle="none" 
             BorderWidth="0px" >
</asp:TextBox>
</ItemTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText="Location" 
                   SortExpression="Location">
<ItemTemplate>
<asp:TextBox ID="txtLocation" runat="server" 
             Text='<%# Bind("Location") %>' 
             ReadOnly="true" 
             BorderStyle="none" BorderWidth="0px">
</asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
        </Columns>
    </asp:GridView>

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:LabSystemDBConnectionString %>" 
        ProviderName="<%$ ConnectionStrings:LabSystemDBConnectionString.ProviderName %>" 
        SelectCommand="SELECT * FROM [Details]"
        DeleteCommand = "DELETE FROM [Details] WHERE ID = [@ID]">

    <DeleteParameters>
    <asp:Parameter Name="ID" />
    </DeleteParameters></asp:SqlDataSource>


    <asp:Button ID="btnDelete" runat="server" OnClick="btnDelete_Click" OnClientClick="return DeleteConfirmation();"  Text="Delete" />
    &nbsp;<br />
Protected Sub btnDelete\u Click(ByVal sender作为对象,ByVal e作为事件参数)处理btnDelete。单击
'创建字符串集合以存储要删除的记录的ID
Dim idCollection作为新的StringCollection()
Dim strID As String=String.Empty
'循环GridView行以查找选中的行
对于i As Integer=0到i
-Default.aspx-

Protected Sub btnDelete_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnDelete.Click
    'create string collection to store IDs of records to be deleted
    Dim idCollection As New StringCollection()
    Dim strID As String = String.Empty
    'Loop through GridView rows to find checked rows 
    For i As Integer = 0 To i < GridView1.Rows.Count - 1
        Dim chkDelete As CheckBox = DirectCast(GridView1.Rows(i).Cells(0).FindControl("chkSelect"), CheckBox)
        If chkDelete IsNot Nothing Then
            If chkDelete.Checked Then

                strID = GridView1.Rows(i).Cells(1).Text
                idCollection.Add(strID)

            End If
        End If
    Next

    'called method to delete record
    DeleteMultipleRecords(idCollection)

    'rebind(GridView)
    GridView1.DataBind()
End Sub
Private Sub DeleteMultipleRecords(ByVal idCollection As StringCollection)
    'create connection
    Dim cnnOLEDB As New OleDbConnection(strConnection)
    Dim IDs As String = ""

    'create string builder to store 
    'delete commands seperated by ;

    For Each id As String In idCollection

        IDs += id.ToString() & ","
    Next

    Try

        Dim strIDs As String = IDs.Substring(0, IDs.LastIndexOf(""))
        Dim strSql As String = ("Delete from Details WHERE ID = '" & strIDs & "' ")

        cmdOLEDB.CommandType = CommandType.Text
        cmdOLEDB.CommandText = strSql
        cmdOLEDB.Connection = cnnOLEDB
        cnnOLEDB.Open()
        cmdOLEDB.ExecuteNonQuery()
        cmdOLEDB.Dispose()

    Catch ex As OleDbException

        Dim errorMsg As String = "Error in Deletion"
        errorMsg += ex.Message
        Throw New Exception(errorMsg)

    Finally
        cnnOLEDB.Close()
    End Try

End Sub
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
        DataSourceID="SqlDataSource1" AutoGenerateColumns="False" DataKeyNames="ID">
        <Columns>
        <asp:TemplateField HeaderText="Select">
<ItemTemplate>

<asp:CheckBox ID="chkSelect" runat="server" />
</ItemTemplate>
 </asp:TemplateField>
<asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID"/>

<asp:TemplateField HeaderText="Name" 
                   SortExpression="Name">
<ItemTemplate>
<asp:TextBox ID="txtName" runat="server" 
             Text='<%# Bind("Name") %>'  ReadOnly="true" 
             BorderStyle="none" 
             BorderWidth="0px" >
</asp:TextBox>
</ItemTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText="Location" 
                   SortExpression="Location">
<ItemTemplate>
<asp:TextBox ID="txtLocation" runat="server" 
             Text='<%# Bind("Location") %>' 
             ReadOnly="true" 
             BorderStyle="none" BorderWidth="0px">
</asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
        </Columns>
    </asp:GridView>

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:LabSystemDBConnectionString %>" 
        ProviderName="<%$ ConnectionStrings:LabSystemDBConnectionString.ProviderName %>" 
        SelectCommand="SELECT * FROM [Details]"
        DeleteCommand = "DELETE FROM [Details] WHERE ID = [@ID]">

    <DeleteParameters>
    <asp:Parameter Name="ID" />
    </DeleteParameters></asp:SqlDataSource>


    <asp:Button ID="btnDelete" runat="server" OnClick="btnDelete_Click" OnClientClick="return DeleteConfirmation();"  Text="Delete" />
    &nbsp;<br />



您应该更改这些行才能工作:

For Each id As String In idCollection

    IDs += "'" + id.ToString() & "',"
Next

Try

    Dim strIDs As String = IDs.Substring(0, IDs.LastIndexOf(""))
    Dim strSql As String = ("Delete from Details WHERE ID IN (" & strIDs & ")")

但是:此代码容易出错,您必须在2012年使用SQL参数。

请在

Dim strSql As String = ("Delete from Details WHERE ID IN (" & strIDs & ")")
然后运行您的应用程序,并将watch添加到strSql,当遇到断点时,按F11,然后您可以看到strSql的内容,复制sql语句并在Access数据库中运行查询,并查看它是否工作


PS:尝试将[]添加到表名,从[详细信息]中删除。

我已经更改了,但仍然相同,没有错误,但没有删除记录