Vb.net – Filtering Data on a DevExpress GridView

devexpressgridviewvb.netwebforms

I am an MVC person, and have minimal experience with WebForms, but now I am having to add some functionality to a legacy VB.NET WebForms application.

So the application is using DevExpress Grids, and it displays a really long grid view on the page where one of the columns has the following:

radio actions

The extra functionality that I am asked to add is a filter where the user can say:

I only want to see the rows where the on-load radio button selected is Print (or one of the other two actions).

So I went to the bottom of the grid and created the following:

filter drop down

My thinking was, the user can come to this drop down and selected what he or she wants to filter on for radio button actions.

DevExpress GridView Code

<dx:ASPxGridView ID="GridView1" runat="server" Theme="Office2010Blue" KeyFieldName="ID" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1" Width="3200px">
    <Columns>
        <!-- Many more columns go here -->
        <dx:GridViewDataColumn Caption="" VisibleIndex="29" Name="decision" Width="150px">
            <HeaderTemplate>
                <asp:LinkButton runat="server" ID="lnkPrint" OnClick="SelectPrintAll">Print All</asp:LinkButton>
                <asp:LinkButton runat="server" ID="lnkEmail" OnClick="SelectEmailAll">Email All</asp:LinkButton>
                <asp:LinkButton runat="server" ID="lnkIgnore" OnClick="SelectIgnoreAll">Ignore All</asp:LinkButton>
            </HeaderTemplate>

            <DataItemTemplate>
                <asp:UpdatePanel runat="server" ID="upRadDecision" UpdateMode="Conditional">
                    <ContentTemplate>
                        <dx:ASPxRadioButtonList ID="radDecision" runat="server" RepeatDirection="Horizontal"
                            OnSelectedIndexChanged="StoreDecisionForRow" AutoPostBack="True" Height="15px"
                            OnDataBinding="BindDecisionRadioButton">
                            <Border BorderStyle="None"></Border>
                            <Paddings Padding="0"></Paddings>
                            <Items>
                                <dx:ListEditItem Text="Print" Value="Print" />
                                <dx:ListEditItem Text="Email" Value="Email" />
                                <dx:ListEditItem Text="Ignore" Value="Ignore" />
                            </Items>
                        </dx:ASPxRadioButtonList>
                    </ContentTemplate>
                </asp:UpdatePanel>
            </DataItemTemplate>
            <Settings HeaderFilterMode="CheckedList"></Settings>
        </dx:GridViewDataColumn>
    </Columns>

    <!-- Stylres -->
    <Styles>
        <AlternatingRow Enabled="true" />
    </Styles>

    <!-- Settings -->
    <Settings ShowFilterRow="True" ShowFilterRowMenu="true" ShowFilterBar="Auto" ShowHeaderFilterButton="true" ShowGroupPanel="True" ShowFooter="True" />
    <SettingsBehavior AllowSelectByRowClick="False" />
    <SettingsBehavior AllowSelectSingleRowOnly="False" />
    <SettingsBehavior ProcessSelectionChangedOnServer="true" />
    <SettingsPager Mode="ShowAllRecords" />

    <GroupSummary>
        <dx:ASPxSummaryItem SummaryType="Count" />
    </GroupSummary>
</dx:ASPxGridView>

I have added a click handler to my filter button, and the code is like so:

Private Sub btnFilterDefaults_Click(sender As Object, e As EventArgs) Handles btnFilterDefaults.Click
    Dim filterOn As String = ddDefaultsFilterOption.SelectedValue
    'Code Handling the Filtering.
    GridView1.filter
    For rowIndex As Integer = 0 To GridView1.VisibleRowCount - 1
        Dim datarow = GridView1.GetDataRow(rowIndex)
        Dim radDecision As ASPxRadioButtonList = CType(GridView1.FindRowCellTemplateControl(rowIndex, Nothing, "radDecision"), ASPxRadioButtonList)
        Dim decision As String = ""

        If radDecision.Value Is Nothing then Continue For

        decision = radDecision.Value.ToString()

        If decision.Contains(filterOn) Then
            datarow.?? <<<<< no option to hide row here!!! :/
        End If
    Next
End Sub

I was hoping that when I got hold of the data row, I'd be able to hide it, but there is no such option!

Best Answer

I think the issue is you're trying to apply a visible trait to a datarow. What you want to do is use GridViewRow instead. It's the presentation object. Sorry I don't have an example for you but here is a link to msdn for it

Related Topic