This is a migrated thread and some comments may be shown as answers.

Combobox filter for Radgrid

1 Answer 157 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Andy
Top achievements
Rank 1
Andy asked on 01 Aug 2011, 10:47 PM
Hi all,

I am applying Combobox filter for Radgrid like
http://demos.telerik.com/aspnet-ajax/grid/examples/programming/filtertemplate/defaultcs.aspx

But I would like to do more than that.
Let's say, Course column has
 + CS123
 + CS124
 + CS890
 + BM123
 + BM124

If user chooses CS123 from Combobox, of course, it will filter data has CS123 only.
Beside that, I would like add another function which allows user inputs data for filtering.
For example, user input "123" and press Enter
It will filter data includes "123", the result should be "CS123", and "BM123"

That means user can have 2 options:
 + Choose course from dropdown list
 + Or input data and press Enter (work like "Contains" function) 

Thanks,

Andy.



1 Answer, 1 is accepted

Sort by
0
Elliott
Top achievements
Rank 2
answered on 02 Aug 2011, 06:05 PM
three combo boxes, all of which AND together
        <tr>
        <td style="width: 74px; height: 23px;">
            <asp:LinkButton ID="lnkAll" OnClick="lnkAll_Click" Font-Bold="False" Font-Names="Arial" Font-Size="8pt" Font-Underline="True" ForeColor="#0000C0" Text="All Records" Width="67px" runat="server" />
        </td>
        <td style="width: 141px; height: 23px;"><span style="font-size: 8pt; color: #0000c0; font-family: Arial">Ship Date</span>
            <telerik:RadComboBox ID="cmbShipDate" Width="86px" Font-Names="Arial" Font-Size="8pt" ForeColor="#0000C0" OnSelectedIndexChanged="cmbShipDate_SelectedIndexChanged" AutoPostBack="True" runat="server" />
        </td>
        <td style="width: 189px; height: 23px;">
            <span style="font-size: 8pt; color: #0000cc; font-family: Arial">Department</span>
            <telerik:RadComboBox ID="cmbDepart" Width="123px" Font-Names="Arial" Font-Size="8pt" ForeColor="#0000C0" DataValueField="DepartmentNumber" DataTextField="DepartmentDescription" OnSelectedIndexChanged="cmbDepart_SelectedIndexChanged" AutoPostBack="True" runat="server" />
        </td>
        <td style="width: 118px; height: 23px;">
           <span style="font-size: 8pt; color: #0000cc; font-family: Arial">Store #</span>
            <telerik:RadComboBox ID="cmbStores" Width="76px" Font-Names="Arial" Font-Size="8pt" ForeColor="#0000C0" OnSelectedIndexChanged="cmbStores_SelectedIndexChanged" AutoPostBack="True" runat="server" />
        </td>
        </tr>
.....
        <telerik:RadGrid ID="rgEditOrder" OnNeedDataSource="rgEditOrder_NeedDataSource"
            OnItemCommand="rgEditOrder_ItemCommand" OnItemCreated="rgEditOrder_ItemCreated"
            ShowFooter="True" runat="server" Skin="Sunset">
        <GroupingSettings CaseSensitive="false" />
        <MasterTableView DataKeyNames="OrderSeq" AutoGenerateColumns="false" AllowSorting="true" AllowPaging="true" AllowFilteringByColumn="False" EditMode="InPlace" >
        <Columns>
            <telerik:GridBoundColumn UniqueName="StoreNumber" DataField="StoreNumber" HeaderText="Store #" DataFormatString="{0:#####}" DataType="System.Int32" Aggregate="None" ReadOnly="True">
                <HeaderStyle Width="40px" />
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn UniqueName="BoothNumber" DataField="BoothNumber" HeaderText="Booth #" DataFormatString="{0:#####}" DataType="System.Int32" Aggregate="None" ReadOnly="True">
                <HeaderStyle Width="40px" />
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn UniqueName="ItemID" DataField="ItemID" HeaderText="Item" DataType="System.Double" Aggregate="None" ReadOnly="True">
                <HeaderStyle Width="40px" />
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn UniqueName="ItemDescription" DataField="ItemDescription" HeaderText="Description" ReadOnly="True">
                <HeaderStyle Width="100px" />
            </telerik:GridBoundColumn>
            <telerik:GridDateTimeColumn UniqueName="ShipDate" DataField="ShipDate" PickerType="DatePicker" HeaderText="Ship Date" DataFormatString="{0:d}" DataType="System.DateTime" >
                <HeaderStyle Width="60px" />                    
            </telerik:GridDateTimeColumn>
            <telerik:GridTemplateColumn UniqueName="Qty" HeaderText="Cases" DataField="Qty" DataType="System.Int32" Aggregate="Sum" >
                <ItemTemplate>
                    <asp:Label ID="lblQty" Text='<%# Bind("Qty") %>' Width="40px" runat="server" />
                </ItemTemplate>
                <EditItemTemplate>
                    <telerik:RadNumericTextBox ID="rntbQty" Value='<%# Eval("Qty") %>' OnTextChanged="rntbQty_TextChanged" AutoPostBack="True" Width="40px" runat="server">
                        <NumberFormat DecimalDigits="0" />
                    </telerik:RadNumericTextBox>
                </EditItemTemplate>
                <HeaderStyle Width="40px" />
            </telerik:GridTemplateColumn>
            <telerik:GridBoundColumn UniqueName="NetCost" DataField="NetCost" HeaderText="Net Cost" DataFormatString="{0:C2}" DataType="System.Double" Aggregate="None" ReadOnly="True">
                <HeaderStyle Width="50px" />
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn UniqueName="ItemTotal" DataField="ItemTotal" HeaderText="Item Total" DataFormatString="{0:C2}" DataType="System.Double" Aggregate="Sum" ReadOnly="True">
                <HeaderStyle Width="50px" />
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn UniqueName="PageNumber" DataField="PageNumber" HeaderText="Page" DataFormatString="{0:#####}" DataType="System.Int32" Aggregate="None" ReadOnly="True">
                <HeaderStyle Width="40px" />
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn UniqueName="VendorNumber" DataField="VendorNumber" HeaderText="Vendor" DataFormatString="{0:#####}" DataType="System.Int32" Aggregate="None" ReadOnly="True">
                <HeaderStyle Width="40px" />
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn UniqueName="DepartmentNumber" DataField="DepartmentNumber" HeaderText="Depart" DataFormatString="{0:##}" DataType="System.Int32" Aggregate="None" ReadOnly="True">
                <HeaderStyle Width="30px" />
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn UniqueName="OrderSeq" DataField="OrderSeq" DataType="System.Int64" Visible="false">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn UniqueName="MinQty" DataField="MinQty" DataType="System.Int32" Visible="false">
            </telerik:GridBoundColumn>
        </Columns>
        </MasterTableView>
        <ClientSettings>
            <ClientEvents OnRowDblClick="RowDblClick" />
            <ClientEvents OnRowClick="RowClick" />
        </ClientSettings>
        </telerik:RadGrid>
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.IsPostBack)
        {
 
.....
            FillComboBoxes();
       }
 
    private void FillComboBoxes()
    {
        RadComboBoxItem rcbItem;
        int i;
        DateTime ShipDate;
        DataSet dsOrder = new DataSet();
        WsOrderSystem wsOrder = new WsOrderSystem();
        dsOrder = wsOrder.GetOnlineOrder(Convert.ToDouble(txtStoreHidden.Value), txtChain.Value);
 
        //populate stores
          
        DataView dv = new DataView(dsOrder.Tables[0]);
        dv = dsOrder.Tables[0].DefaultView;
        dv.Sort = "StoreNumber";
        // create data table of unique store numbers
        // in the data view taken from the dataset of order items
        DataTable dtStores = dv.ToTable(true, "StoreNumber");
        rcbItem = new RadComboBoxItem("All");
        cmbStores.Items.Add(rcbItem);
 
        for (i = 0; i < dtStores.Rows.Count; i++)
        {
            rcbItem = new RadComboBoxItem(dtStores.Rows[i][0].ToString());
            cmbStores.Items.Add(rcbItem);
        }
 
        //populate department
        // create table of unique department numbers and department descriptions
        // in the data view taken from the dataset of order items
        dtStores = dv.ToTable(true, "DepartmentNumber", "DepartmentDescription");
        cmbDepart.DataSource = dtStores;
        cmbDepart.DataValueField = dtStores.Columns[0].ColumnName;
        cmbDepart.DataTextField = dtStores.Columns[1].ColumnName;
        cmbDepart.DataBind();
        rcbItem = new RadComboBoxItem("All");
        cmbDepart.Items.Add(rcbItem);
        cmbDepart.SelectedIndex = cmbDepart.Items.Count - 1;
 
        //populate ship dates
        dv.Sort = "ShipDate";
        // create data table of unique ship dates in the view
        // taken from the dataset of order items
        dtStores = dv.ToTable(true, ("ShipDate"));
        rcbItem = new RadComboBoxItem("All");
        cmbShipDate.Items.Add(rcbItem);
        for (i = 0; i < dtStores.Rows.Count; i++)
        {
            ShipDate = Convert.ToDateTime(dtStores.Rows[i][0]);
            rcbItem = new RadComboBoxItem(ShipDate.ToShortDateString());
            //cmbShipDate.Items.Add(Convert.ToDateTime(dtStores.Rows[i][0].ToString()).ToShortDateString());
            cmbShipDate.Items.Add(rcbItem);
        }
    }
 
....
    protected void lnkAll_Click(object sender, EventArgs e)
    {
        cmbShipDate.SelectedIndex = 0;
        cmbDepart.SelectedIndex = cmbDepart.Items.Count - 1;
        cmbStores.SelectedIndex = 0;
        rgEditOrder.MasterTableView.FilterExpression = string.Empty;
        rgEditOrder.Rebind();
    }
 
    protected void cmbShipDate_SelectedIndexChanged(object o, RadComboBoxSelectedIndexChangedEventArgs e)
    {
        string filterExpression;
        filterExpression = RemoveFilter("ShipDate");
        rgEditOrder.MasterTableView.FilterExpression = filterExpression;
        if (cmbShipDate.SelectedItem.Text == "All")
            filterExpression = string.Empty;
        else
            filterExpression = "([ShipDate] = '" + cmbShipDate.SelectedItem.Text + "')";
        rgEditOrder.MasterTableView.FilterExpression = AppendFilterExpression(filterExpression);
        rgEditOrder.EditIndexes.Clear();
        ClearOutItemData();
        rgEditOrder.MasterTableView.Rebind();
    }
 
    protected void cmbDepart_SelectedIndexChanged(object o, RadComboBoxSelectedIndexChangedEventArgs e)
    {
        string filterExpression;
        filterExpression = RemoveFilter("DepartmentNumber");
        rgEditOrder.MasterTableView.FilterExpression = filterExpression;
        if (cmbDepart.SelectedItem.Text == "All")
            filterExpression = string.Empty;
        else
            filterExpression = "([DepartmentNumber] = '" + cmbDepart.SelectedValue.ToString() + "')";
        rgEditOrder.MasterTableView.FilterExpression = AppendFilterExpression(filterExpression);
        rgEditOrder.EditIndexes.Clear();
        ClearOutItemData();
        rgEditOrder.MasterTableView.Rebind();
    }
 
    protected void cmbStores_SelectedIndexChanged(object o, RadComboBoxSelectedIndexChangedEventArgs e)
    {
        string filterExpression;
        filterExpression = RemoveFilter("StoreNumber");
        rgEditOrder.MasterTableView.FilterExpression = filterExpression;
        if (cmbStores.SelectedItem.Text == "All")
            filterExpression = string.Empty;
        else
            filterExpression = "([StoreNumber] = '" + cmbStores.SelectedItem.Text + "')";
        rgEditOrder.MasterTableView.FilterExpression = AppendFilterExpression(filterExpression);
        rgEditOrder.EditIndexes.Clear();
        ClearOutItemData();
        rgEditOrder.MasterTableView.Rebind();
    }
 
    private string AppendFilterExpression(string filterExpression)
    {
        StringBuilder sb;
        sb = new StringBuilder(rgEditOrder.MasterTableView.FilterExpression);
        if (filterExpression == string.Empty)
            return sb.ToString();
        if (sb.ToString() != string.Empty)
        {
            sb.Append(" AND ");
        }
        sb.Append(filterExpression);
        return sb.ToString();
    }
 
    private string RemoveFilter(string columnName)
    {
        string filterExpression;
        string[] filterArray;
        string charac = "&";
        char[] amper = charac.ToCharArray();
        StringBuilder sb;
        int i;
 
        sb = new StringBuilder("");
        filterExpression = rgEditOrder.MasterTableView.FilterExpression;
        filterExpression = filterExpression.Replace(" AND ", charac);
        filterArray = filterExpression.Split(amper, 3);
 
        for (i=0; i < filterArray.Length;i++)
        {
            if (filterArray[i].IndexOf(columnName) == -1)
            {
                if (sb.Length > 0)
                {
                    sb.Append(charac);
                }
                sb.Append(filterArray[i]);
            }
        }
        filterExpression = sb.ToString();
        filterExpression = filterExpression.Replace(charac," AND "); 
        return filterExpression;
    }
Tags
Grid
Asked by
Andy
Top achievements
Rank 1
Answers by
Elliott
Top achievements
Rank 2
Share this question
or