FlowLayoutPanel 无法识别它的控件
FlowLayoutPanel not recognising it's controls
我一直在尝试创建一个动态搜索功能,该功能利用多个用户控件(条带)来构建搜索条件。字符串正在正确构建,所以没有问题。但是,当在模块中调用 search() 函数时,flowLayoutPanel 不再识别其中的条带(我已将消息框放入以跟踪它们丢失的位置)。
如有任何建议,我们将不胜感激。
**************frmAttributesSearch Class*************************** ************************
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
尝试将过滤器发送到函数。
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())
我一直在尝试创建一个动态搜索功能,该功能利用多个用户控件(条带)来构建搜索条件。字符串正在正确构建,所以没有问题。但是,当在模块中调用 search() 函数时,flowLayoutPanel 不再识别其中的条带(我已将消息框放入以跟踪它们丢失的位置)。 如有任何建议,我们将不胜感激。
**************frmAttributesSearch Class*************************** ************************
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
尝试将过滤器发送到函数。
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())