If e.CommandName = RadGrid.FilterCommandName Then Dim filterPair As Pair = TryCast(e.CommandArgument, Pair) Dim filterName As String = Convert.ToString(filterPair.First) Dim columnName As String = Convert.ToString(filterPair.Second) If columnName = "PUBLISHED_DATE" Then e.Canceled = True Dim startDate As TextBox = CType((CType(e.Item, GridFilteringItem))(filterPair.Second.ToString()).Controls(0), TextBox) Dim endDate As TextBox = TryCast(TryCast(e.Item, GridFilteringItem)(filterPair.Second.ToString()).Controls(1), TextBox) ------------------------------------------------------------------------------------------- AND If e.CommandName = RadGrid.FilterCommandName Then Dim filterPair As Pair = TryCast(e.CommandArgument, Pair) Dim filterName As String = Convert.ToString(filterPair.First) Dim columnName As String = Convert.ToString(filterPair.Second) If columnName = "PUBLISHED_DATE" Then e.Canceled = True Dim filteringItem As GridFilteringItem = TryCast(e.Item, GridFilteringItem) Dim startDate As TextBox = DirectCast(filteringItem("PUBLISHED_DATE").Controls(0), TextBox) Dim endDate As TextBox = DirectCast(DirectCast(e.Item, GridFilteringItem)(filterPair.Second.ToString()).Controls(1), TextBox) 8 Answers, 1 is accepted
The CommandArgument Pair should contain date-time objects and you should be casting to those. Certainly, the pair does not contain text boxes.
All the best,
Tsvetoslav
the Telerik team
"The CommandArgument Pair should contain date-time objects" When I access the CommandArgument Pair it contains "filter type" and column "unique name".
Dim filterName As String = Convert.ToString(filterPair.First) Dim columnName As String = Convert.ToString(filterPair.Second)That code gives me "filterName = Between" & "columnName = Published_Date"
Could you please elaborate on your original response?
Sorry for that - my original response was based on a misunderstanding of your code. Could you paste your complete code-behind so that I can go through it and see what's going on.
Greetings, Tsvetoslav
the Telerik team
As I said in my original post, I am attempting to introduce basic filtering into my radgrid. The basic filtering works with one exception, I cannot get range filtering to function. I can input a "From:" and "To:" date and choose my filter type of "Between" and it will rebind the grid with a subset of results that were contained in the original radgrid. But none of the returned results match my date range search and I cannot determine what the results have in common and why they were returned.
My next step was to determine if there was an error with the grid or a problem with my data. I found this article "Operating with the FilterExpression of Telerik RadGrid Manually" which would allow me to trouble shoot a problem with the grid by allowing me to place a breakpoint on the "ItemCommand" and see what dates the radgrid was working with. Example from article:
Protected Sub RadGrid1_ItemCommand(ByVal source As Object, ByVal e As GridCommandEventArgs) Handles RadGrid1.ItemCommand If e.CommandName = RadGrid.FilterCommandName Then Dim filterPair As Pair = DirectCast(e.CommandArgument, Pair) gridMessage1 = "Current Filter function: '" + filterPair.First + "' for column '" + filterPair.Second + "'" Dim filterBox As TextBox = CType((CType(e.Item, GridFilteringItem))(filterPair.Second.ToString()).Controls(0), TextBox) gridMessage2 = "<br> Entered pattern for search: " + filterBox.Text End If End Sub Private gridMessage1 As String = Nothing Private gridMessage2 As String = Nothing Protected Sub RadGrid1_DataBound(ByVal sender As Object, ByVal e As EventArgs) Handles RadGrid1.DataBound If Not String.IsNullOrEmpty(gridMessage1) Then DisplayMessage(gridMessage1) DisplayMessage(gridMessage2) End If End Sub Private Sub DisplayMessage(ByVal text As String) RadGrid1.Controls.Add(New LiteralControl(String.Format("<span style='color:red'>{0}</span>", text))) End SubI took the above example and began to modify it to suit my code. I have yet to find a valid way to Cast the information from the "From:" & "To:" date range boxes so that I may begin to trouble shout my issue with range filtering.
If e.CommandName = RadGrid.FilterCommandName Then Dim filterPair As Pair = TryCast(e.CommandArgument, Pair) Dim filterName As String = Convert.ToString(filterPair.First) Dim columnName As String = Convert.ToString(filterPair.Second) If columnName = "PUBLISHED_DATE" Then e.Canceled = True Dim filteringItem As GridFilteringItem = TryCast(e.Item, GridFilteringItem) Dim startDate As TextBox = DirectCast(filteringItem("PUBLISHED_DATE").Controls(0), TextBox) Dim endDate As TextBox = DirectCast(DirectCast(e.Item, GridFilteringItem)(filterPair.Second.ToString()).Controls(1), TextBox) Dim sDate As String = startDate.Text Dim eDate As String = endDate.Text Dim newFilter As String = "('" & startDate.ToString("MM/dd/yyyy") & "' <= [PUBLISHED_DATE] AND [PUBLISHED_DATE] <= '" & endDate.ToString("MM/dd/yyyy") & "')" Dim dateColumn As GridBoundColumn = DirectCast(e.Item.OwnerTableView.GetColumnSafe(columnName), GridBoundColumn) dateColumn.CurrentFilterValue = startDate.ToString("MM/dd/yyyy") gridSearchResults.MasterTableView.FilterExpression = newFilter gridSearchResults.Rebind() End IfEnd IfImports System.Data Imports System.Data.OracleClient Imports Telerik.Web.UI Imports SecureVal Partial Class Test_Search Inherits System.Web.UI.Page #Region "Properties" Dim SQLConnStr As String = ConfigurationManager.ConnectionStrings("DDConnStr").ConnectionString #End Region #Region "Telerik" Private Function GetRGvSearchResults(ByVal srcType As String, ByVal srcTerm As String) As Object Dim SQL As String = "" SQL = "select distinct ID, CASE TYPE when'RULE' then DESCRIPTION when 'RULESTATEMENT' then DESCRIPTION else NAME end as NAME, TYPE, DESCRIPTION, VERSION, STANDARDIZATION_STATUS, RULE_PUB, C2IDDSTANDARD_PUB, OTHER_PUB, PUB_TYPE, to_char(to_date(PUBLISHED_DATE),'MM/DD/YYYY') as PUBLISHED_DATE FROM VW_ALL_OBJECT_TYPES WHERE TYPE = '" & srcType & "' ORDER by TYPE, Ltrim(Upper(NAME)), VERSION, PUBLISHED_DATE" Select Case UCase(srcType) Case "PUBLICATION" labTopSearchTitle.Text = "Publications" txtSearchType.Value = SecStr(srcType) labPageDesc.Text = "Below are registered publications." gridSearchResults.Columns(2).HeaderStyle.Width = 150 gridSearchResults.Columns(3).Visible = True gridSearchResults.Columns(3).HeaderStyle.Width = 75 gridSearchResults.Columns(4).HeaderStyle.Width = 275 gridSearchResults.Columns(5).Visible = True gridSearchResults.Columns(5).HeaderStyle.Width = 350 gridSearchResults.Columns(6).Visible = True gridSearchResults.Columns(6).HeaderStyle.Width = 65 gridSearchResults.Columns(7).Visible = True gridSearchResults.Columns(8).Visible = True gridSearchResults.Columns(9).Visible = True gridSearchResults.Columns(10).Visible = True End Select Dim EISRSQL As String = SQL Dim table As New DataTable() Dim EISRComm As New OracleCommand Dim EISRConn As New OracleConnection(SQLConnStr) Dim adapter As OracleDataAdapter = New OracleDataAdapter adapter.SelectCommand = New OracleCommand(SecSQL(EISRSQL), EISRConn) EISRConn.Open() Try adapter.Fill(table) gridSearchResults.DataSource = table If table.Rows.Count = 0 Then gridSearchResults.DataSource = Nothing labDebug.Text = "No results for " & SecStr(srcTerm) End If Catch ex As Exception If ConfigurationManager.AppSettings("ErrorMode").ToString = "DEVL" Then labDebug.Visible = True labDebug.Text = labDebug.Text & "There was a problems:<br/>" & ex.Message.ToString & "<br />" ' & SQL Else Response.Redirect("~/errors.aspx") End If Finally EISRConn.Close() EISRConn.Dispose() OracleConnection.ClearPool(EISRConn) End Try Return table End Function Protected Sub gridSearchResults_NeedDataSource(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridNeedDataSourceEventArgs) Handles gridSearchResults.NeedDataSource GetRGvSearchResults("PUBLICATION", "") End Sub Protected Sub gridSearchResults_SortCommand(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridSortCommandEventArgs) Handles gridSearchResults.SortCommand gridSearchResults.DataSource = Nothing gridSearchResults.Rebind() End Sub Protected Sub gridSearchResults_ItemCreated(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridItemEventArgs) Handles gridSearchResults.ItemCreated '------ this is the styling for each cell inside RADgrid ----- If e.Item.ItemType = Telerik.Web.UI.GridItemType.Header Then For Each cell As TableCell In e.Item.Cells cell.Style("font-weight") = "normal" cell.Style("vertical-align") = "top" Next End If End Sub#End Region #Region "Init" Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Not Page.IsPostBack Then GetRGvSearchResults("PUBLICATION", "") End If End Sub Protected Sub gridSearchResults_ItemCommand(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Handles gridSearchResults.ItemCommand End Sub#End Region #Region "Functions" Function FormatTypePage(ByVal strType As Object, ByVal strID As Object) As String Dim retVal As String = "" Dim thisLocation As String = "" If Not SecStr(Request.QueryString("t")) = "" Then thisLocation = SecStr(Request.QueryString("t")) Else thisLocation = SecStr(Request.QueryString("s")) End If If Not IsDBNull(strType) Then Select Case strType Case "PUBLICATION" retVal = "PubDetail.aspx?o=" & strID.ToString & "&l=" & thisLocation End Select End If Return retVal End Function Function FormatData(ByVal showStr As String) As String Dim retStr As String = String.Empty Select Case showStr Case "Y" retStr = "<b style='color:green; font-family: Wingdings 2;'>P</b>" Case Else retStr = String.Empty End Select Return retStr End Function #End Region End ClassYou should be casting to RadDatePicker type, not TextBox. Do use the Visual Studio debugger to inspect what type of controls you have elsewhere you need to cast them to the correct type.
Regards, Tsvetoslav
the Telerik team
Dim startDate As RadDatePicker = CType((CType(e.Item, GridFilteringItem))(filterPair.Second.ToString()).Controls(0), RadDatePicker)Dim startDate As RadDatePicker = DirectCast(DirectCast(e.Item, GridFilteringItem)(filterPair.Second.ToString()).Controls(0), RadDatePicker)Dim startDate As RadDatePicker = DirectCast(filteringItem("PUBLISHED_DATE").Controls(0), RadDatePicker)As I have already mentioined, do debug your code in order to get a clear picture on what controls are in your code signatures. You should be getting the second control in the fitler item cell, not the first one. The first one is a literal:
Dim startDate As RadDatePicker = CType((CType(e.Item, GridFilteringItem))(filterPair.Second.ToString()).Controls(1), RadDatePicker) Dim startDate As RadDatePicker = DirectCast(DirectCast(e.Item, GridFilteringItem)(filterPair.Second.ToString()).Controls(1), RadDatePicker) Dim startDate As RadDatePicker = DirectCast(filteringItem("PUBLISHED_DATE").Controls(1), RadDatePicker)Greetings, Tsvetoslav
the Telerik team