FlowLayoutPanel не распознает свои элементы управления
Я пытался создать функцию динамического поиска, которая использует несколько пользовательских элементов управления (полос) для создания условий поиска. Струны строятся правильно, поэтому проблем нет. Однако когда в модуле вызывается функция 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
1 ответ
Решение
Попробуйте отправить фильтры в функцию.
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())