Back to Devexpress

ASPxGridView.FindFilterCellTemplateControl(GridViewColumn, String) Method

aspnet-devexpress-dot-web-dot-aspxgridview-dot-findfiltercelltemplatecontrol-x28-devexpress-dot-web-dot-gridviewcolumn-system-dot-string-x29.md

latest7.0 KB
Original Source

ASPxGridView.FindFilterCellTemplateControl(GridViewColumn, String) Method

Searches for the server control contained within the specified filter row cell template.

Namespace : DevExpress.Web

Assembly : DevExpress.Web.v25.2.dll

NuGet Package : DevExpress.Web

Declaration

csharp
public Control FindFilterCellTemplateControl(
    GridViewColumn column,
    string id
)
vb
Public Function FindFilterCellTemplateControl(
    column As GridViewColumn,
    id As String
) As Control

Parameters

NameTypeDescription
columnGridViewColumn

A GridViewColumn descendant that is a column within the ASPxGridView.

| | id | String |

A String value that identifies the control within the specified filter cell.

|

Returns

TypeDescription
Control

A Control object that is the control contained within the specified filter cell’s template.

|

Example

In some cases, when the default filter row editor’s functionality is not enough, you can provide custom filter cell content using the GridViewColumn.FilterTemplate.

In this example, a default cell editor is replaced with the ASPxGridLookup control. The control’s ASPxClientEdit.ValueChanged client-side event is used to send a callback to the server side, invoking the grid’s ASPxGridView.CustomCallback event. In the event handler, a filter criteria is created and applied to the grid using the ASPxGridView.ApplyFilterToColumn method.

View Example

aspx
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function Lookup_ValueChanged(s, e) {
            grid.PerformCallback("FilterByCategories");
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <div style="max-width: 960px">
        <dx:ASPxGridView runat="server" ID="Grid" AutoGenerateColumns="False" DataSourceID="ProductsDataSource"
            ClientInstanceName="grid" OnCustomCallback="Grid_CustomCallback" EnableViewState="false">
            <Columns>
                <dx:GridViewDataTextColumn FieldName="CategoryName">
                    <FilterTemplate>
                        <dx:ASPxGridLookup runat="server" ID="Lookup" AutoGenerateColumns="False" DataSourceID="CategoriesDataSource"
                            KeyFieldName="CategoryID" SelectionMode="Multiple" TextFormatString="{0}">
                            <Columns>
                                <dx:GridViewCommandColumn ShowSelectCheckbox="true" />
                                <dx:GridViewDataTextColumn FieldName="CategoryName" />
                                <dx:GridViewDataBinaryImageColumn FieldName="Picture">
                                    <PropertiesBinaryImage ImageWidth="48" />
                                </dx:GridViewDataBinaryImageColumn>
                            </Columns>
                            <ClientSideEvents ValueChanged="Lookup_ValueChanged" />
                        </dx:ASPxGridLookup>
                    </FilterTemplate>
                </dx:GridViewDataTextColumn>
                <dx:GridViewDataTextColumn FieldName="ProductName" />
                <dx:GridViewDataTextColumn FieldName="ProductSales" />
                <dx:GridViewDataDateColumn FieldName="ShippedDate" />
            </Columns>
            <Settings ShowFilterRow="true" />
        </dx:ASPxGridView>
        <asp:AccessDataSource ID="ProductsDataSource" runat="server" DataFile="~/App_Data/nwind.mdb"
            SelectCommand="SELECT * FROM [ProductReports]" />
        <asp:AccessDataSource ID="CategoriesDataSource" runat="server" DataFile="~/App_Data/nwind.mdb"
            SelectCommand="SELECT * FROM [Categories]" />
        </div>
    </form>
</body>
</html>
csharp
using DevExpress.Data.Filtering;
using DevExpress.Web;

public partial class _Default : System.Web.UI.Page {
    protected void Grid_CustomCallback(object sender, ASPxGridViewCustomCallbackEventArgs e) {
        if(e.Parameters == "FilterByCategories") {
            var column = Grid.DataColumns["CategoryName"];
            var lookup = Grid.FindFilterCellTemplateControl(column, "Lookup") as ASPxGridLookup;
            if(lookup != null)
                Grid.ApplyFilterToColumn(column, CreateCriteria(lookup, column.FieldName));
        }
    }

    protected CriteriaOperator CreateCriteria(ASPxGridLookup gridLookup, string fieldName) {
        var values = gridLookup.GridView.GetSelectedFieldValues(fieldName);
        return values.Count > 0 ? new InOperator(fieldName, values) : null;
    }
}
vb
Imports DevExpress.Data.Filtering
Imports DevExpress.Web

Partial Public Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Grid_CustomCallback(ByVal sender As Object, ByVal e As ASPxGridViewCustomCallbackEventArgs)
        If e.Parameters = "FilterByCategories" Then
            Dim column = Grid.DataColumns("CategoryName")
            Dim lookup = TryCast(Grid.FindFilterCellTemplateControl(column, "Lookup"), ASPxGridLookup)
            If lookup IsNot Nothing Then
                Grid.ApplyFilterToColumn(column, CreateCriteria(lookup, column.FieldName))
            End If
        End If
    End Sub

    Protected Function CreateCriteria(ByVal gridLookup As ASPxGridLookup, ByVal fieldName As String) As CriteriaOperator
        Dim values = gridLookup.GridView.GetSelectedFieldValues(fieldName)
        Return If(values.Count > 0, New InOperator(fieldName, values), Nothing)
    End Function
End Class

See Also

Grid View

ASPxGridView Class

ASPxGridView Members

DevExpress.Web Namespace