【发布时间】:2018-04-08 03:47:05
【问题描述】:
我的 winform 中有一个 DataGridView 以及一个用于在 DataGridView 中搜索的 TextBox。 DataGridView 有一个 CheckBox 列。这就是我的代码的样子:
Imports System.ComponentModel
imports system.Data.sqlclient
Public Class MyForm
Dim con As New SqlConnection("Data source=" & My.Settings.sqlserver & ", " & My.Settings.sqlport & ";Network Library=DBMSSOCN;initial catalog=" & My.Settings.dbname & ";User id=" & My.Settings.Username & ";Password=" & My.Settings.Password & ";")
Dim ds As New DataSet
Private Sub filterdata(valuetosearch As String)
Dim srq As String = "Select * from Contacts where CONCAT([Unique id],Prefix,[First name],[Last name],Gender,Title,Company,Phone,Mobile,Fax,[b.email],[p.email],Reference,Address,[Address 2],Country,City,Zip,Facebook,GooglePlus,Instagram,Twitter,Website,Salary,Currency,[Group],[Id/Status],Note,[Added by]) like '%" & valuetosearch & "%' "
Dim adapter As New SqlDataAdapter(srq, con)
adapter.Fill(ds, "Contacts_table")
userdatagrid.DataSource = ds.Tables(0)
End Sub
Private Sub searcgcon_TextChanged(sender As Object, e As EventArgs) Handles searcgcon.TextChanged
If searcgcon.Text = "" Then
filterdata("")
entrylabel.Text = "There are/is " & userdatagrid.Rows.Count & " contact entries"
Else
filterdata(searcgcon.Text)
entrylabel.Text = "There are/is " & userdatagrid.Rows.Count & " contact entries that contain your query :" & searcgcon.Text
End If
End Sub
Private sub refresh_click()handles refresh.click
filterdata("")
end sub
End class
我已经更正了一个较早的问题(请参阅How to maintain datagridview checkstate when filtering VB.net)。
现在我遇到的问题是当我按下触发“filterdata”的按钮时,例如刷新按钮,甚至当我在 TextBox(用于过滤的那个)中单击/键入某些内容时,DataGridView 会不断添加相同数据的行。请告诉我哪里错了。
我在其他网站上发布了这个。一个人说我filterdata的代码应该在表单的Load事件中。如果我这样做,那么我将面临一些问题,例如:
我不会有一个名为 filterdata 的子
如果我没有那个 sub,我应该如何在 TextBox TextChanged 事件中使用它?
如果我还是错了,请纠正我。我只是个学生!
(附注:数据库包含一个 Image 列,我无法将其包含在 srq 字符串中,因为它在 adapter.fill 上给我一个错误,提示“操作数类型冲突:图像与 nvarchar 不兼容”)
【问题讨论】:
-
您问题中的代码有点乱。您有一个 Sub
filterdata后跟一些不在任何方法中的代码行(这是不允许的),然后是一个无效的事件处理程序。请编辑代码,使其有效并且我们知道发生了什么。 -
尝试在您的 filterdata 过程中放置一个断点。这很可能会告诉您“某些”关于它被调用的原因或从哪里调用它
-
先生,filterdata 是从一个事件中调用的,即文本框的 textchanged 事件
-
请重新阅读帖子.....我正确安排了代码
-
@Plutonix 虽然 OP 创建了一个新帐户来提出这个问题似乎很奇怪,但它似乎与之前的帐户不同(OP 说它已解决)。
标签: vb.net datagridview