niedziela, 24 czerwca 2012

Dynamiczne dodanie elmentów do Filtru typu ComboBox w Gridzie

Korzystając z RadGrida możemy stworzyć szablon filtrowania dla kolumny. Jeżeli chcemy aby zamiast zwykłego TextBoxa można było wybrać wartość z ComboBoxa bardzo łatwo to osiągnąć.
Zobaczmy na przykład:


Aby zmienić filtr kategorii ze zwykłego TextBoxa na np. ComboBox możemy posłużyć się poniższym kodem:

Code:
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <telerik:RadScriptManager ID="RadScriptManager1" runat="server">
    </telerik:RadScriptManager>
    <telerik:RadGrid ID="rgProducts" runat="server" DataSourceID="lqProducts"
    AllowPaging="True" PageSize="10" AutoGenerateColumns="False" AllowFilteringByColumn="True"
    EnableLinqExpressions="True" onitemcommand="rgProducts_ItemCommand" onitemdatabound="rgProducts_ItemDataBound" 
    >
        <MasterTableView>
            <Columns>
                <telerik:GridBoundColumn UniqueName="ProductName" SortExpression="ProductName" 
                HeaderText="Nazwa" DataField="ProductName" DataType="System.String" />
                <telerik:GridBoundColumn UniqueName="ProductModel" SortExpression="ProductModel" 
                HeaderText="Model" DataField="ProductModel" />
                <telerik:GridBoundColumn UniqueName="ProductCategoryName" SortExpression="ProductCategoryName" 
                HeaderText="Kategoria" DataField="ProductCategoryName">
                    <%-- 
                    <FilterTemplate>
                        <telerik:RadComboBox runat="server" ID="rcbCategoryName"></telerik:RadComboBox>
                    </FilterTemplate>
                    --%>
                </telerik:GridBoundColumn>
            </Columns>
        </MasterTableView>
    </telerik:RadGrid>
    <asp:LinqDataSource runat="server" ID="lqProducts" 
        onselecting="lqProducts_Selecting"></asp:LinqDataSource>

W code behind umieszczamy następujący kod:

Code:
protected void lqProducts_Selecting(object sender, LinqDataSourceSelectEventArgs e)
        {
            var adventureWorksLt2012Entities = new AdventureWorksLT2012Entities();
            e.Result = adventureWorksLt2012Entities.Products.Select(x => new { x.ProductID, ProductName = x.Name, ProductModel = x.ProductModel.Name, ProductCategoryName = x.ProductCategory.Name }).OrderBy(x => x.ProductID);
        }

        protected void rgProducts_ItemCommand(object sender, GridCommandEventArgs e)
        {
        }

        protected void rgProducts_ItemDataBound(object sender, GridItemEventArgs e)
        {
            if (e.Item is GridFilteringItem)
            {
                var filterItem = (GridFilteringItem)e.Item;
                var categoriesComboBox = (RadComboBox)filterItem.FindControl("rcbCategoryName");// accessing RadComboBox in FilterTemplate
                var adventureWorksLt2012Entities = new AdventureWorksLT2012Entities();
                foreach (var consultant in adventureWorksLt2012Entities.Products.GroupBy(x => x.ProductCategory).Select(x => new { x.Key.Name, x.Key.ProductCategoryID }))
                {
                    categoriesComboBox.Items.Add(new RadComboBoxItem(consultant.Name, consultant.ProductCategoryID.ToString()));
                }
            }
        }

Brak komentarzy:

Prześlij komentarz