0

我的网站的工具:

  • 视觉工作室 2010
  • SQL 管理工作室
  • 视觉基础网

我正在使用 GridView。由于我的搜索代码,我无法使用 GridView 提供的自动删除功能。

我点击了 GridView,说“添加新列”并添加了一个复选框列。

我希望能够选中一个或多个框并选择一个按钮,该按钮将使用存储过程从数据库中删除这些行。

下面是我的代码的 ASP.net 部分

默认.aspx

<%@ Page Title="Home Page" Language="vb" MasterPageFile="~/Site.Master" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="ContactList._Default" %>

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="asp" %>

<%-- CONNECTION STRING--%>
            <%--string Connection = "server=Local; uid=sa; pwd=; database=TGMInfo; Connect Timeout=10000";--%>


        <asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">

            <link href="Styles/Site.css" rel="stylesheet" type="text/css" />

        </asp:Content>
        <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
            <h2>
                Welcome to THE TGM CONTACTS SITE</h2>
            <p>
                &nbsp;</p>


            <p></p>
               <center>
                   <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">


              </asp:ToolkitScriptManager>
               Add a new record to the database<br />
                <br />



        <%--Text boxes for First Name, Last Name and Main Phone Number--%>

            <asp:Label ID="lblFirstName" runat="server" Text="First Name:"></asp:Label>
    &nbsp;<asp:TextBox ID="txtFirstName" runat="server" Width="160px"></asp:TextBox>
    &nbsp;&nbsp;&nbsp;&nbsp;
            <asp:Label ID="LblLastName" runat="server" Text="Last Name:"></asp:Label>
    &nbsp;<asp:TextBox ID="txtLastName" runat="server" Width="160px"></asp:TextBox>
    &nbsp;&nbsp;&nbsp;&nbsp;
            <asp:Label ID="lblMainPhone" runat="server" Text="Main Phone #:"></asp:Label>
    &nbsp;<asp:TextBox ID="txtMainPhone" runat="server" Width="160px"></asp:TextBox>
                <asp:MaskedEditExtender ID="txtMainPhone_MaskedEditExtender" runat="server" 
                   ErrorTooltipEnabled="True" Mask="(999) 999-9999" MaskType="Number" 
                   TargetControlID="txtMainPhone">
               </asp:MaskedEditExtender>
                <br />
            <br />


          <%--Button adds information from the text fields to the SQL Database--%>
               <asp:Button ID="btnAdd" runat="server" Text="Add Record" />
               <br />
               <br />
               <br />
               Search by Last Name<br />
               <asp:Label ID="lblQuery" runat="server" Text="Last Name:"></asp:Label>
    &nbsp;<asp:TextBox ID="txtQuery" runat="server" ToolTip="Search by last name"></asp:TextBox>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
               <br />
               <br />
               <asp:Button ID="BtnQuery" runat="server" Text="Search" />
               <br />
             </center>



        <p>
            &nbsp;</p>
        <p>
            &nbsp;</p>
          <center>
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                DataKeyNames="EmpId" 
                EmptyDataText="There are no data records to display." CellPadding="4" 
            ForeColor="#333333" GridLines="None" Height="136px" Width="299px">
                <AlternatingRowStyle BackColor="White" />
                <Columns>
    <%--                <asp:BoundField DataField="MainPhoneNumber" HeaderText="Main Phone Number" 
                        SortExpression="MainPhoneNumber" />--%>
                    <asp:BoundField DataField="EmpId" HeaderText="EmpId" ReadOnly="True" 
                        SortExpression="EmpId" Visible="False" />
                    <asp:BoundField DataField="FirstName" HeaderText="First Name" 
                        SortExpression="FirstName" />
                    <asp:BoundField DataField="LastName" HeaderText="Last Name" 
                        SortExpression="LastName" />
                        <asp:TemplateField HeaderText="Main Phone Number"> 
                    <ItemTemplate> 
                     <asp:Literal ID="litPhone"  runat="server" Text='<%# string.Format("{0:(###) ###-####}", Int64.Parse(Eval("MainPhoneNumber").ToString())) %>' /> 
                    </ItemTemplate> 
                    </asp:TemplateField> 

                    <asp:TemplateField HeaderText="Check For Deletion">
                        <ItemTemplate>
                            <asp:CheckBox ID="CheckBox1" runat="server" />
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:CheckBox ID="CheckBox1" runat="server" />
                        </EditItemTemplate>
                    </asp:TemplateField>

                </Columns>
                <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
                <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
                <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
                <RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
                <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
                <SortedAscendingCellStyle BackColor="#FDF5AC" />
                <SortedAscendingHeaderStyle BackColor="#4D0000" />
                <SortedDescendingCellStyle BackColor="#FCF6C0" />
                <SortedDescendingHeaderStyle BackColor="#820000" />
            </asp:GridView>
    <p>
         <center>
          <asp:Button ID="Button1" runat="server" Text="Delete Selected Rows" 
              ToolTip="Check desired rows and click this button for deletion" />
              </p>
              <p>
                  &nbsp;</p>
            </center>
        </asp:Content>

我想我发布了我需要的所有内容,如果没有,我可以发布更多。到目前为止,我没有发布代码隐藏 (visual basic.net) 或 2 个存储过程。我对 vb.net/asp.net/存储过程很陌生。

4

2 回答 2

1

将此代码用于您的删除方法,以扫描您的复选框并删除行。

Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    For Each gvr As GridViewRow In GridView1.Rows
        If gvr.Visible AndAlso DirectCast(gvr.FindControl("CheckBox1"), CheckBox).Checked Then
            Response.Write(String.Format("DELETING ROW {0}<br>", gvr.DataItemIndex))
            gvr.Visible = False 'Hide the row without the need for a re-bind'

            'Use the "DataItemIndex" to get the database row key information for your delete'
            'run your delete procedure'
        End If
    Next
End Sub
于 2010-08-19T17:22:39.090 回答
0

这是我查找选中复选框的信息。

Protected Sub Button1_Click1(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 d = 0 To GridView1.Rows.Count - 1


        If GridView1.Rows(d).Cells.FromKey("DeleteRecord").Value = True Then
            strID = GridView1.Rows(d).Cells.FromKey("EmpID").Value
            idCollection.Add(strID)
        End If
    Next

    'Call the method to Delete records 
    DeleteMultipleRecords(idCollection)


    QueryEmployees("")




End Sub

这是调用我的存储过程的子代码。

Private Sub DeleteMultipleRecords(ByVal idCollection As StringCollection)

        Dim SqlConn4 As SqlConnection = New SqlConnection("Password=;Persist Security Info=True;User ID=;Initial Catalog=;Data Source=.\SQLEXPRESS")
        Dim cmd4 As New SqlCommand("Password=;Persist Security Info=True;User ID=;Initial Catalog=;Data Source=.\SQLEXPRESS")
        Dim IDs As String = ""

        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 & ")"
            For i = 0 To idCollection.Count - 1

                cmd4.CommandType = CommandType.StoredProcedure
                cmd4.Parameters.AddWithValue("@IDs", CInt(idCollection(i)))
                cmd4.CommandText = "dbo.SPDeleteEmp"
                cmd4.Connection = SqlConn4
                SqlConn4.Open()
                cmd4.ExecuteNonQuery()
            Next
        Catch ex As SqlException

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

        Finally
            SqlConn4.Close()
        End Try

    End Sub

虽然这可行,但目前这只一次只删除一个复选框,但完成了我需要知道的大部分内容。另外,感谢卡特帮助回答这个问题。

于 2010-08-23T13:46:57.730 回答