我一直在尝试创建一个动态搜索功能,该功能利用多个用户控件(条带)来构建搜索条件。字符串正在构建正确,所以没有问题。但是当在模块中调用search()函数时,flowLayoutPanel不再识别其中有条带(我已将消息框放入其中以跟踪它们丢失的位置)。 任何建议将不胜感激。
************** frmAttributesSearch类******************************* *****************
Public Class frmAttributesSearch
Private Sub btnAddCondition_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddNewCondition.Click
FlowLayoutPanel1.Controls.Add(New UCAddAttribute)
MsgBox("Controls are here when added: " & FlowLayoutPanel1.Controls.Count)
End Sub
Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click
MsgBox("Still here on search click: " & FlowLayoutPanel1.Controls.Count)
dgPlayers.DataSource = search()
End Sub
Public Function buildFilterString()
MsgBox("Still lost on buildFilterString: " & FlowLayoutPanel1.Controls.Count)
Dim myString As String = ""
For Each strip As UCAddAttribute In FlowLayoutPanel1.Controls
myString = myString + strip.cmbAttribute.SelectedItem & " " & strip.cmbEqualityFactor.SelectedItem & " " & Integer.Parse(strip.txtNumber.Text) & " AND "
Next
myString = myString + "1 = 1"
Return myString
End Function
End Class
**************模块******************************** *********************************
Public Function search() As DataTable
MsgBox("Lost here on search: " & frmAttributesSearch.FlowLayoutPanel1.Controls.Count)
Dim dt As New DataTable
Dim Str As String = _
<String> SELECT
*
FROM
Player
INNER JOIN Report ON Report.PlayerID = Player.PlayerID
WHERE
<%= frmAttributesSearch.buildFilterString() %>
ORDER BY
ReportDate
</String>
Try '@txtNumber>>> was at the end of buildFilterString
Using conn As New SqlClient.SqlConnection(DBConnection)
conn.Open()
Using cmdQuery As New SqlClient.SqlCommand(Str, conn)
Using daResults As New SqlClient.SqlDataAdapter(cmdQuery)
daResults.Fill(dt)
End Using
End Using
End Using
Catch ex As Exception
MsgBox("Filter Search Exception: " & ex.Message & vbNewLine & Str)
End Try
Return dt
End Function
答案 0 :(得分:0)
尝试将过滤器发送到该功能。
Public Shared Function search(filters As String) As DataTable
Dim dt As New DataTable
Dim Str As String = _
<String> SELECT
*
FROM
Player
INNER JOIN Report ON Report.PlayerID = Player.PlayerID
WHERE
<%= filters %>
ORDER BY
ReportDate
</String>
Try '@txtNumber>>> was at the end of buildFilterString
Using conn As New SqlClient.SqlConnection(DBConnection)
conn.Open()
Using cmdQuery As New SqlClient.SqlCommand(Str, conn)
Using daResults As New SqlClient.SqlDataAdapter(cmdQuery)
daResults.Fill(dt)
End Using
End Using
End Using
Catch ex As Exception
MsgBox("Filter Search Exception: " & ex.Message & vbNewLine & Str)
End Try
Return dt
End Function
用法:
dgPlayers.DataSource = search(buildFilterString())