ASP.NET可以通过选中复选框从gridview删除特定行

时间:2018-06-30 10:27:00

标签: asp.net database gridview

我需要以下代码的帮助。它的工作原理很好。但是,当页面加载时,它显示数据库中的所有数据,用户可以从中选择要删除的哪一行。 我想使用某种过滤器。 我的意思是。当页面正在加载时,它是空的..我只在文本框中输入文本,然后单击搜索按钮,然后显示包含文本框中特定文本的所有行。.现在我选择要删除的行并标记为复选框以删除。

简单地说...我想从包含文本框文本的特定行中进行选择,并将其标记为要删除...而不是从所有行中删除...

谢谢大家的帮助 那我的代码

 Imports System
 Imports System.Data
 Imports System.Data.SqlClient
 Imports System.Configuration
 Imports System.Web
 Imports System.Web.Security
 Imports System.Web.UI
 Imports System.Web.UI.WebControls
 Imports System.Web.UI.WebControls.WebParts
 Imports System.Web.UI.HtmlControls
 Imports System.Collections
 Imports System.Text

 Partial Public Class VB
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    If IsPostBack Then
        GetData()
    End If
    BindGrid()
End Sub

Private Sub BindGrid()
    Dim constr As String = ConfigurationManager _
                .ConnectionStrings("conString").ConnectionString()
    Dim query As String = "select * from TestCustomers"
    Dim con As New SqlConnection(constr)
    Dim sda As New SqlDataAdapter(query, con)
    Dim dt As New DataTable()
    sda.Fill(dt)
    gvAll.DataSource = dt
    gvAll.DataBind()
End Sub

Protected Sub OnPaging(ByVal sender As Object, ByVal e As GridViewPageEventArgs)
    gvAll.PageIndex = e.NewPageIndex
    gvAll.DataBind()
    SetData()
End Sub

Private Sub GetData()
    Dim arr As ArrayList
    If ViewState("SelectedRecords") IsNot Nothing Then
        arr = DirectCast(ViewState("SelectedRecords"), ArrayList)
    Else
        arr = New ArrayList()
    End If
    Dim chkAll As CheckBox = DirectCast(gvAll.HeaderRow _
                .Cells(0).FindControl("chkAll"), CheckBox)
    For i As Integer = 0 To gvAll.Rows.Count - 1
        If chkAll.Checked Then
            If Not arr.Contains(gvAll.DataKeys(i).Value) Then
                arr.Add(gvAll.DataKeys(i).Value)
            End If
        Else
            Dim chk As CheckBox = DirectCast(gvAll.Rows(i).Cells(0) _
                                        .FindControl("chk"), CheckBox)
            If chk.Checked Then
                If Not arr.Contains(gvAll.DataKeys(i).Value) Then
                    arr.Add(gvAll.DataKeys(i).Value)
                End If
            Else
                If arr.Contains(gvAll.DataKeys(i).Value) Then
                    arr.Remove(gvAll.DataKeys(i).Value)
                End If
            End If
        End If
    Next
    ViewState("SelectedRecords") = arr
End Sub

Private Sub SetData()
    Dim currentCount As Integer = 0
    Dim chkAll As CheckBox = DirectCast(gvAll.HeaderRow _
                    .Cells(0).FindControl("chkAll"), CheckBox)
    chkAll.Checked = True
    Dim arr As ArrayList = DirectCast(ViewState("SelectedRecords") _
                                    , ArrayList)
    For i As Integer = 0 To gvAll.Rows.Count - 1
        Dim chk As CheckBox = DirectCast(gvAll.Rows(i).Cells(0) _
                                        .FindControl("chk"), CheckBox)
        If chk IsNot Nothing Then
            chk.Checked = arr.Contains(gvAll.DataKeys(i).Value)
            If Not chk.Checked Then
                chkAll.Checked = False
            Else
                currentCount += 1
            End If
        End If
    Next
    hfCount.Value = (arr.Count - currentCount).ToString()
End Sub

Protected Sub btnDelete_Click(ByVal sender As Object, ByVal e As EventArgs)
    Dim count As Integer = 0
    SetData()
    gvAll.AllowPaging = False
    gvAll.DataBind()
    Dim arr As ArrayList = DirectCast(ViewState("SelectedRecords") _
                                , ArrayList)
    count = arr.Count
    For i As Integer = 0 To gvAll.Rows.Count - 1
        If arr.Contains(gvAll.DataKeys(i).Value) Then
            DeleteRecord(gvAll.DataKeys(i).Value.ToString())
            arr.Remove(gvAll.DataKeys(i).Value)
        End If
    Next
    ViewState("SelectedRecords") = arr
    hfCount.Value = "0"
    gvAll.AllowPaging = True
    BindGrid()
    ShowMessage(count)
End Sub

Private Sub DeleteRecord(ByVal CustomerID As String)
    Dim constr As String = ConfigurationManager _
                    .ConnectionStrings("conString").ConnectionString
    Dim query As String = "delete from TestCustomers where" & _
                            " CustomerID=@CustomerID"
    Dim con As New SqlConnection(constr)
    Dim cmd As New SqlCommand(query, con)
    cmd.Parameters.AddWithValue("@CustomerID", CustomerID)
    con.Open()
    cmd.ExecuteNonQuery()
    con.Close()
End Sub

Private Sub ShowMessage(ByVal count As Integer)
    Dim sb As New StringBuilder()
    sb.Append("<script type = 'text/javascript'>")
    sb.Append("alert('")
    sb.Append(count.ToString())
    sb.Append(" records deleted.');")
    sb.Append("</script>")
    ClientScript.RegisterStartupScript(Me.GetType(), _
                    "script", sb.ToString())
End Sub
End Class

1 个答案:

答案 0 :(得分:0)

您只需要修改SQL查询。它选择所有字段而没有任何条件。假设您有两个要在其中搜索文本的字段A和B。然后您的查询应更改为 从TestCustomers中选择*,其中A如'%'+ TextBox1.Text +“%'或B如'%” + TextBox1.Text +“%'