Asp.net 自定义日期列telerik网格的过滤器选项

Asp.net 自定义日期列telerik网格的过滤器选项,asp.net,filtering,telerik-grid,Asp.net,Filtering,Telerik Grid,我使用的是telerik网格。我需要为网格中的所有列应用过滤器。目前,我正在使用以下代码自定义过滤器选项。通过使用以下代码,我删除了所有列的某些项。但是,对于日期列,任何人都可以告诉我网格中过滤的可能选项以及如何自定义这些过滤选项吗 代码隐藏 protected void RGVTest_Init(object sender, EventArgs e) { GridFilterMenu menu = RGVTest.FilterMenu; int

我使用的是telerik网格。我需要为网格中的所有列应用过滤器。目前,我正在使用以下代码自定义过滤器选项。通过使用以下代码,我删除了所有列的某些项。但是,对于日期列,任何人都可以告诉我网格中过滤的可能选项以及如何自定义这些过滤选项吗

代码隐藏

    protected void RGVTest_Init(object sender, EventArgs e)
    {

        GridFilterMenu menu = RGVTest.FilterMenu;
        int i = 0;
        while (i < menu.Items.Count)
        {
            if (menu.Items[i].Text == "Between" ||
                menu.Items[i].Text == "NotBetween")
            {
                menu.Items.RemoveAt(i);
            }
            else
            {
                i++;
            }
        }
    }
protectedvoid RGVTest_Init(对象发送方,事件参数e)
{
GridFilterMenu=RGVTest.FilterMenu;
int i=0;
while(i
*Aspx:

<telerik:RadGrid ID="RGVTest" runat="server" Skin="Vista" AllowPaging="True"
            AllowFilteringByColumn="true" AllowSorting="true" GridLines="None" OnItemCommand="RGVTest_ItemCommand"
            PageSize="10" OnNeedDataSource="RGVTest_NeedDataSource" OnItemDataBound="RGVTest_ItemDataBound"
            OnInit="RGVTest_Init">
            <GroupingSettings CaseSensitive="false" />
            <PagerStyle Mode="NextPrevAndNumeric" AlwaysVisible="true" />
            <MasterTableView AutoGenerateColumns="False" CellSpacing="-1" >
                <NoRecordsTemplate>
                    <div style="color: red">
                        No Records to display!
                    </div>
                </NoRecordsTemplate>
                <Columns>

                    <telerik:GridTemplateColumn DataField="SSN" ReadOnly="True" HeaderText="SSN" UniqueName="SSN"
                        SortExpression="SSN">
                        <ItemTemplate>
                            <asp:Label ID="LblSSN" runat="server" Text='<%#Eval("SSN") %>'></asp:Label>
                        </ItemTemplate>
                        <ItemStyle HorizontalAlign="Left" Width="5%" />
                    </telerik:GridTemplateColumn>

                    <telerik:GridTemplateColumn DataField="Date" HeaderText="Date" UniqueName="Date"
                        SortExpression="Date">
                        <ItemTemplate>
                            <asp:Label ID="LblDate" runat="server" Text='<%#Eval("Date","{0:MM/dd/yyyy}") %>'></asp:Label>
                        </ItemTemplate>
                        <ItemStyle HorizontalAlign="Left" Width="4%" />
                    </telerik:GridTemplateColumn>

                </Columns>
            </MasterTableView>
        </telerik:RadGrid>

没有要显示的记录!
您确实喜欢这种方式:

 protected void RadGrid1_ItemCommand(object source, GridCommandEventArgs e)  
 {  
     if (e.CommandName == RadGrid.FilterCommandName)  
     {  
         Pair filterPair = e.CommandArgument as Pair;  
         string columnName = Convert.ToString(filterPair.Second);  
         if (columnName == "CreationDate")  
         {  
            e.Canceled = true;  
             string date = ((TextBox)((GridFilteringItem)e.Item)[Convert.ToString(filterPair.Second)].Controls          [0]).Text;  
             DateTime startDate = Convert.ToDateTime(date);  
             DateTime endDate = startDate.AddDays(1);  
             string newFilter = "('" + startDate.ToString("MM/dd/yyyy") + "' <= [CreationDate] AND [CreationDate] <= '"         + endDate.ToString("MM/dd/yyyy") + "')";   
             GridBoundColumn dateColumn = (GridBoundColumn)e.Item.OwnerTableView.GetColumnSafe(columnName);  
             dateColumn.CurrentFilterValue = startDate.ToString("MM/dd/yyyy");  
            RadGrid1.MasterTableView.FilterExpression = newFilter;  
             RadGrid1.Rebind();  
         }  
     }  
 }  
protectedvoid RadGrid1\u ItemCommand(对象源,GridCommandEventArgs e)
{  
如果(e.CommandName==RadGrid.FilterCommandName)
{  
Pair filterPair=e.CommandArgument作为Pair;
string columnName=Convert.ToString(filterPair.Second);
如果(columnName==“CreationDate”)
{  
e、 取消=真;
字符串日期=((文本框)((GridFilterGitem)e.Item)[Convert.ToString(filterPair.Second)]。控件[0])。文本;
DateTime startDate=Convert.ToDateTime(日期);
DateTime endDate=startDate.AddDays(1);
string newFilter=“(”+startDate.ToString(“MM/dd/yyyy”)+”像这样试试

function FilterMenuShowing(sender, eventArgs)   
   {     
       if (eventArgs.get_column().get_uniqueName() == "IsPostable")      
       {              
           var menu = eventArgs.get_menu();   
           var items = menu._itemData;   

           var i = 0;   

           while (i < items.length)     
           {     
               if (items[i].value != "NoFilter" && items[i].value != "EqualTo" && items[i].value != "NotEqualTo")     
               {     
                   var item = menu._findItemByValue(items[i].value);   
                   if (item != null)   
                       item._element.style.display="none";   
               }     
               i++;     
           }
       }
       else
       {
           var menu = eventArgs.get_menu();   
           var items = menu._itemData;   

           var i = 0;
           while (i < items.length)     
           {     
               var item = menu._findItemByValue(items[i].value);   
               if (item != null)   
                   item._element.style.display="";   
               i++;     
           }
       }     

   }  
函数过滤器显示(发送方、事件参数)
{     
if(eventArgs.get_column().get_uniqueName()=“IsPostable”)
{              
var menu=eventArgs.get_menu();
变量项=菜单。\u项数据;
var i=0;
while(i
在网格上添加-

<ClientSettings>  
    <ClientEvents OnFilterMenuShowing="filterMenuShowing" />  
</ClientSettings>

查看详细信息

您可以在“订单日期”列中尝试以下操作。
受保护的void RadGrid1_ItemCommand(对象源,Telerik.Web.UI.GridCommandEventArgs e)
{
如果(e.CommandName==RadGrid.FilterCommandName&&
((Pair)e.CommandArgument).Second.ToString()=“OrderDate”
&&
((成对)e.CommandArgument.First!=“NoFilter”)
{
e、 取消=真;
GridFilteringItem filterItem=(GridFilteringItem)e.Item;
string currentPattern=(filterItem[((对)e.CommandArgument).Second.ToString()]。控件[0]作为文本框)。文本;
字符串过滤器模式=”;
字符串filterPatterAssist=“”;
if(currentPattern.IndexOf(“”)=-1)
{
currentPattern=currentPattern.Replace(“,”/”);
}
字符串[]vals=currentPattern.Split(“/”.ToCharArray());
string filterOption=(e.CommandArgument作为Pair.First.ToString();
if(filterOption!=“IsNull”&&filterOption!=“NotIsNull”)
{
如果(vals.Length>3)
{
FilterPatterAssist=VAL[4]+“/”+VAL[3]+“/”+VAL[5];
}
filterPattern=VAL[1]+“/”+VAL[0]+“/”+VAL[2];
}
GridBoundColumn dateColumn=(GridBoundColumn)e.Item.OwnerTableView.GetColumnSafe(“OrderDate”);
开关(过滤器选项)
{
案例“EqualTo”:
filterPattern=“[OrderDate]=”+filterPattern+”;
dateColumn.CurrentFilterFunction=GridKnownFunction.EqualTo;
打破
案例“NotEqualTo”:
filterPattern=“非[OrderDate]=”+filterPattern+”;
dateColumn.CurrentFilterFunction=GridKnownFunction.NotEqualTo;
打破
案例“大于”:
filterPattern=“[OrderDate]>”+filterPattern+“”;
dateColumn.CurrentFilterFunction=GridKnownFunction.GreaterThan;
打破
“LessThan”案:
filterPattern=“[OrderDate]<”+filterPattern+”;
dateColumn.CurrentFilterFunction=GridKnownFunction.LessThan;
打破
“大于或等于”一案:
filterPattern=“[OrderDate]>=”+filterPattern+”;
dateColumn.CurrentFilterFunction=GridKnownFunction.GreaterThanOrEqualTo;
打破
“LessThanOrEqualTo”案:
filterPattern=“[OrderDate]
You can try the way its done below for "order date" column.

protected void RadGrid1_ItemCommand(object source, Telerik.Web.UI.GridCommandEventArgs e)
{
    if (e.CommandName == RadGrid.FilterCommandName &&
    ((Pair)e.CommandArgument).Second.ToString() == "OrderDate"
     &&
    ((Pair)e.CommandArgument).First != "NoFilter")
    {
        e.Canceled = true;
        GridFilteringItem filterItem = (GridFilteringItem)e.Item;
        string currentPattern = (filterItem[((Pair)e.CommandArgument).Second.ToString()].Controls[0] as TextBox).Text;
        string filterPattern = "";
        string filterPatternAssist = "";
        if (currentPattern.IndexOf(" ") != -1)
        {
            currentPattern = currentPattern.Replace(" ", "/");
        }
        string[] vals = currentPattern.Split("/".ToCharArray());
        string filterOption = (e.CommandArgument as Pair).First.ToString();
        if (filterOption != "IsNull" && filterOption != "NotIsNull")
        {
            if (vals.Length > 3)
            {
                filterPatternAssist = vals[4] + "/" + vals[3] + "/" + vals[5];
            }
            filterPattern = vals[1] + "/" + vals[0] + "/" + vals[2];
        }
        GridBoundColumn dateColumn = (GridBoundColumn)e.Item.OwnerTableView.GetColumnSafe("OrderDate");
        switch (filterOption)
        {
            case "EqualTo":
                filterPattern = "[OrderDate] = '" + filterPattern + "'";
                dateColumn.CurrentFilterFunction = GridKnownFunction.EqualTo;
                break;
            case "NotEqualTo":
                filterPattern = "Not [OrderDate] = '" + filterPattern + "'";
                dateColumn.CurrentFilterFunction = GridKnownFunction.NotEqualTo;
                break;
            case "GreaterThan":
                filterPattern = "[OrderDate] > '" + filterPattern + "'";
                dateColumn.CurrentFilterFunction = GridKnownFunction.GreaterThan;
                break;
            case "LessThan":
                filterPattern = "[OrderDate] < '" + filterPattern + "'";
                dateColumn.CurrentFilterFunction = GridKnownFunction.LessThan;
                break;
            case "GreaterThanOrEqualTo":
                filterPattern = "[OrderDate] >= '" + filterPattern + "'";
                dateColumn.CurrentFilterFunction = GridKnownFunction.GreaterThanOrEqualTo;
                break;
            case "LessThanOrEqualTo":
                filterPattern = "[OrderDate] <= '" + filterPattern + "'";
                dateColumn.CurrentFilterFunction = GridKnownFunction.LessThanOrEqualTo;
                break;
            case "Between":
                filterPattern = "'" + filterPattern + "' <= [OrderDate] AND [OrderDate] <= '" + filterPatternAssist + "'";
                dateColumn.CurrentFilterFunction = GridKnownFunction.Between;
                break;
            case "NotBetween":
                filterPattern = "[OrderDate] <= '" + filterPattern + "' OR [OrderDate] >= '" + filterPatternAssist + "'";
                dateColumn.CurrentFilterFunction = GridKnownFunction.NotBetween;
                break;
            case "IsNull":
                break;
            case "NotIsNull":
                break;
        }
        foreach (GridColumn column in RadGrid1.MasterTableView.Columns)
        {
            if (column.UniqueName != "OrderDate")
            {
                column.CurrentFilterFunction = GridKnownFunction.NoFilter;
                column.CurrentFilterValue = string.Empty;
            }
        }
        Session["filterPattern"] = filterPattern;
        dateColumn.CurrentFilterValue = currentPattern;
        filterItem.OwnerTableView.Rebind();
    }
    //Add more conditional checks for commands here if necessary
    else if (e.CommandName != RadGrid.SortCommandName && e.CommandName != RadGrid.PageCommandName)
    {
        Session["filterPattern"] = null;
        GridBoundColumn dateColumn = (GridBoundColumn)e.Item.OwnerTableView.GetColumnSafe("OrderDate");
        dateColumn.CurrentFilterFunction = GridKnownFunction.NoFilter;
        dateColumn.CurrentFilterValue = string.Empty;
    }
}