FlowLayoutPanel无法识别它的控件

时间:2015-02-18 20:51:06

标签: vb.net user-controls scope flowlayoutpanel

我一直在尝试创建一个动态搜索功能,该功能利用多个用户控件(条带)来构建搜索条件。字符串正在构建正确,所以没有问题。但是当在模块中调用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

1 个答案:

答案 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())