Filter is the key

"The more I work on databinding, the more impressed I am"
Greg Robinson

I can say the same. As an example I was doing some debugging yesterday on a data search.

Basic stuff, with 2 dropdowns and 2 textbox controls to refine the search.

The usual way I write something like that is to send the request and the parameters to a stored procedure which is for me the best way for everything related to databases.

But here I was stuck on the code and nothing was really working. So back to the white board, scratching my head and finally conclude that my search function needed to works as a funnel.

I start from the whole date, and I needed to filter by the different controls content, e.g. Counties list, School Type, etc... The magic word is filter.

So to come back to what say Greg, it's true that now in .Net you can do a lot more without stored procedures.

The idea there is to use the .RowFilter method with a cascade effect until you obtain the right results.

The last issue I fixed is that obviously asking to select all the records from a table can slow down your server if you have too much users.

Thankfully this is not a crucial part of my application, but in case I create a Cache version of the data before doing anything else.

And I am also a big fan of Data Access Application Block ;-)


You can see the result of this code on Scoilnet

Private Property GetAllschools()
        Get
            Dim Conn As SqlConnection

            Conn = New SqlConnection(ConfigurationSettings.AppSettings("Scoil"))

            Dim ds As DataSet
            If Cache("schools"Is Nothing Then
                ds = SqlHelper.ExecuteDataset(ConnCommandType.StoredProcedure"SchoolsAll")

                If ds.Tables(0).Rows.Count > 0 Then
                    Cache.Insert("schools"ds.Tables(0), NothingDateTime.Now.AddMinutes(30), TimeSpan.Zero)
                    Conn.Close()
                    Conn.Dispose()
                    Return Cache("schools")
                Else
                    Return Nothing
                End If
            Else
                Return Cache("schools")
            End If
        End Get
        Set(ByVal Value)
        End Set
    End Property

Sub BindSchoolsData()
        Dim dsTable As DataTable = GetAllschools

        If Not (dsTableIs Nothing Then
            Dim Myfilter As String = ""
            If School_RollNumber.Text.Length > 0 Then
                If Myfilter = "" Then
                    Myfilter = "rollNumber like '%" & School_RollNumber.Text & "%'"
                Else
                    Myfilter += " and rollNumber like '%" & School_RollNumber.Text & "%'"

                End If
            End If
            If TxtSearch.Text.Length > 0 Then
                If Myfilter = "" Then
                    Myfilter = "Name like '%" & TxtSearch.Text & "%'"
                Else
                    Myfilter += " and Name like '%" & TxtSearch.Text & "%'"

                End If
            End If
            If School_Type.SelectedIndex > 0 Then
                If Myfilter = "" Then
                    Myfilter = "SchoolType = '" & School_Type.SelectedItem.Text & "'"
                Else
                    Myfilter += " and SchoolType like '" & School_Type.SelectedItem.Text & "%'"
                End If
            End If
            If County_list.SelectedIndex > 0 Then
                If Myfilter = "" Then
                    Myfilter = "Countyname like '%" & County_list.SelectedItem.Text & "%'"
                Else
                    Myfilter += " and Countyname like '%" & County_list.SelectedItem.Text & "%'"
                End If
            End If
            If Myfilter = "" Then
                Myfilter = "Countyname='nodata'"
            End If

            Dim dv As DataView
            dv = New DataView
            With dv
                .Table = dsTable
                .RowFilter = Myfilter
                .RowStateFilter = DataViewRowState.ModifiedCurrent

            End With
            If dv.Count > 0 Then
                DGPaging.DataSource = dv
                If Search_changed.Text = "changed" Then
                    DGPaging.CurrentPageIndex = 0
                End If
                Schools_search_result.Visible = True
            Else
                DGPaging.DataSource = Nothing
                school_details.Visible = False
                Schools_search_result.Visible = False
                'Panel_noresult.visible = True
            End If


            DGPaging.DataBind()
        Else
            DGPaging.DataSource = Nothing
            school_details.Visible = False
            Schools_search_result.Visible = False
        End If
    End Sub

 

 

No Comments