When a GridDateTimeColumn is bound to a nested object (e.g. DataField="SomeObject.DateField"), column sorting is broken. The sorting appears to be based on the alphanumeric order. Here is the test code below with a workaround and a workaround attempt that causes an exception:
default.aspx:
| <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> |
| <%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %> |
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> |
| <html xmlns="http://www.w3.org/1999/xhtml"> |
| <head runat="server"> |
| <title>Untitled Page</title> |
| </head> |
| <body> |
| <form id="form1" runat="server"> |
| <asp:ScriptManager ID="ScriptManager1" runat="server" /> |
| <div> |
| <telerik:RadGrid AllowSorting="true" AllowPaging="true" PageSize="25" ID="RadGrid1" runat="server" |
| OnNeedDataSource="RadGrid1_NeedDataSource"> |
| <MasterTableView AutoGenerateColumns="false"> |
| <Columns> |
| <telerik:GridDateTimeColumn |
| DataFormatString="{0:MM/dd/yyyy}" |
| DataField="RefDate" |
| UniqueName="Column0" |
| HeaderText="ParentObj"> |
| </telerik:GridDateTimeColumn> |
| <telerik:GridDateTimeColumn |
| DataFormatString="{0:MM/dd/yyyy}" |
| DataField="Dobj.RefDate1" |
| UniqueName="Column1" |
| HeaderText="ChildObj"> |
| </telerik:GridDateTimeColumn> |
| <telerik:GridTemplateColumn |
| SortExpression='Dobj.RefDate1.ToString("s")' |
| UniqueName="Column2" |
| HeaderText="WorkAround1"> |
| <ItemTemplate> |
| <asp:Label ID="Label1" runat="server" |
| Text='<%# String.Format("{0:MM/dd/yyyy}", Eval("Dobj.RefDate1")) %>' |
| > |
| </asp:Label> |
| </ItemTemplate> |
| </telerik:GridTemplateColumn> |
| <telerik:GridDateTimeColumn |
| SortExpression='Dobj.RefDate2.ToString("s")' |
| DataFormatString="{0:MM/dd/yyyy}" |
| DataField="Dobj.RefDate2" |
| UniqueName="Column3" |
| HeaderText="WorkAround2"> |
| </telerik:GridDateTimeColumn> |
| </Columns> |
| </MasterTableView> |
| </telerik:RadGrid> |
| </div> |
| </form> |
| </body> |
| </html> |
default.aspx.cs:
| using System; |
| using System.Data; |
| using System.Configuration; |
| using System.Web; |
| using System.Web.Security; |
| using System.Web.UI; |
| using System.Web.UI.WebControls; |
| using System.Web.UI.WebControls.WebParts; |
| using System.Web.UI.HtmlControls; |
| using System.Collections.Generic; |
| public partial class _Default : System.Web.UI.Page |
| { |
| protected void Page_Load(object sender, EventArgs e) |
| { |
| } |
| protected void RadGrid1_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e) |
| { |
| RadGrid1.DataSource = GetDataList(); |
| } |
| protected List<PObject> GetDataList() |
| { |
| DateTime refdt = new DateTime(2008, 12, 20); |
| var dlist = new List<PObject>(); |
| for (int i = 1; i < 20; i++) |
| { |
| var dt = refdt.AddDays(i); |
| dlist.Add( |
| new PObject |
| { |
| Dobj = new DObject { RefDate1 = dt, RefDate2 = dt }, |
| RefDate = dt |
| } |
| ); |
| } |
| return dlist; |
| } |
| } |
| public class PObject |
| { |
| public DObject Dobj { get; set; } |
| public DateTime RefDate { get; set; } |
| } |
| public class DObject |
| { |
| public DateTime RefDate1 { get; set; } |
| public DateTime RefDate2 { get; set; } |
| } |
You will notice that the first column "ParentObj" sorts fine since the bound property is part of the data object. The second column "ChildObj" is bound to a nested/child object of the main data object. This one does not sort properly. The third column "WorkAround1" is a way to work around the problem using a GridTemplateColumn and a SortExpression using .ToString("s"). Since using a GridTemplateColumn is kind of cumbersome, I thought I'd try adding the .ToString("s") to the SortExpression of a GridDateTimeColumn, but this causes an exception. This is demonstrated when trying sort the "WorkAround2" column. Although this exception should probably fixed anyway (it doesn't make sense that it works for a GridTemplateColumn and not any other kind of bound column), getting the grid to support sorting on a DateTime property of a nested object either way is fine with me.
I have to generate simple graph at the run time which is based on couple of group and I have problem with it.
Here is the Data
|
Total |
Year |
Type |
|
4 |
2009 |
Type1 |
|
1 |
2008 |
Type1 |
|
2 |
2008 |
Type2 |
|
3 |
2008 |
Type3 |
So my X – axis will have Year and Y axis will be Total. I need to show Type for each Year. Since Type is missing for the Year 2009, I have seeing this issue.
We have a radGrid which is loaded many columns.
Each column’s wide is narrower so more columns can be displayed.
One of the columns has radCombo box as a drop down list, and the record count label text extended outside of the comboBox.
This looks very undesirable.
Here is a screen shoot http://lh4.ggpht.com/_ohpx5KZcsi0/SzDjYr35nHI/AAAAAAAAFHU/AH-wzDkTMBI/comboBoxOverlap.JPG
Can this problem be fixed?
| .TabFormat |
| { |
| height:50px !important; |
| background-color:#263144 !important; |
| padding:0px; |
| } |
| .TabFormat:hover |
| { |
| background-color:#212631 !important; |
| color:#f78f1e; |
| } |
| .TabSelected |
| { |
| background-color:#212631 !important; |
| color:#f78f1e !important; |
| } |
| .NavMenuItem |
| { |
| width:150px; |
| height:50px; |
| } |
| .NavMenuItem a, a:hover, a:active |
| { |
| cursor:default; |
| text-decoration:none; |
| color:#f78f1e; |
| } |
| .NavMenuTitle |
| { |
| font-size:12pt; |
| padding:5px 0px 5px 15px; |
| } |
| .NavMenuSubTitle |
| { |
| padding-left:15px; |
| font-size:8pt; |
| } |
| <telerik:RadMenuItem IsSeparator="true" /> |
| <telerik:RadMenuItem runat="server" |
| Text="how it works" |
| CssClass="TabFormat" |
| SelectedCssClass="TabSelected" |
| NavigateUrl="~/HowItWorks.aspx" |
| > |
| <ItemTemplate> |
| <a href="../HowItWorks.aspx"> |
| <div class="NavMenuItem"> |
| <div class="NavMenuTitle"> |
| How it works |
| </div> |
| <div class="NavMenuSubTitle"> |
| we'll show you |
| </div> |
| </div> |
| </a> |
| </ItemTemplate> |
| </telerik:RadMenuItem> |
| Dim currentItem As RadMenuItem |
| If Request.Url.PathAndQuery.Contains("/products/") Then |
| currentItem = RadMenu1.FindItemByText("products") |
| Else |
| currentItem = RadMenu1.FindItemByUrl(Request.Url.PathAndQuery) |
| End If |
| If Not IsNothing(currentItem) Then |
| currentItem.Selected = True |
| ' NOTE: This is a workaround to a bug in the RadMenu that fails to apply the "selectedCSS" |
| ' when using Templates. |
| currentItem.CssClass = "TabSelected" |
| End If |
| Requirements | |
| RadControls version | |
| .NET version | |
| Visual Studio version | |
| programming language | |
| browser support | all browsers supported by RadControls |
| <telerik:RadCodeBlock ID="RadCodeBlock1" runat="server"> |
| <script type="text/javascript" language="javascript"> |
| function onKeyPress(sender, eventArgs) { |
| // 13 is the keycode for enter key |
| if (eventArgs.get_keyCode() == 13) { |
| // LblUpdateButtonId it's an hidden label that contain the id of my custom insert/update button |
| var temp = document.getElementById("<%=LblUpdateButtonId.ClientID %>"); |
| var button_id = temp.innerHTML.replace(/_/g, "$"); |
| // perform postback |
| WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(button_id, "", true, "", "", false, true)); |
| // inhibit event bubbling |
| eventArgs.set_cancel(true); |
| } |
| } |
| </script> |
| </telerik:RadCodeBlock> |
| Protected Sub SetUpdateButtonId(ByVal sender As Object, ByVal e As System.EventArgs) |
| LblUpdateButtonId.Text = CType(sender, Button).ClientID |
| End Sub |