3 Answers, 1 is accepted
0
Shinu
Top achievements
Rank 2
answered on 27 Feb 2009, 06:46 AM
Hi Richard,
Try the following code snippet to Group the Grid on clicking the column header.
ASPX:
JS:
CS:
Set AllowSorting to false if you don't want this functionality.
Regards
Shinu
Try the following code snippet to Group the Grid on clicking the column header.
ASPX:
| <telerik:RadGrid ID="RadGrid1" runat="server" Skin="Outlook" AllowSorting="false" ShowGroupPanel="true" DataSourceID="SqlDataSource1" GridLines="None"> |
| <HeaderContextMenu> |
| <CollapseAnimation Duration="200" Type="OutQuint" /> |
| </HeaderContextMenu> |
| <MasterTableView AutoGenerateColumns="False" DataSourceID="SqlDataSource1"> |
| <Columns> |
| <telerik:GridBoundColumn DataField="ProductID" DataType="System.Int32" HeaderText="ProductID" |
| SortExpression="ProductID" UniqueName="ProductID"> |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" |
| UniqueName="ProductName"> |
| </telerik:GridBoundColumn> |
| <telerik:GridBoundColumn DataField="SupplierID" DataType="System.Int32" HeaderText="SupplierID" |
| SortExpression="SupplierID" UniqueName="SupplierID"> |
| </telerik:GridBoundColumn> |
| </Columns> |
| </MasterTableView> |
| <ClientSettings> |
| <ClientEvents OnColumnClick="OnColumnClick" /> |
| </ClientSettings> |
| </telerik:RadGrid><br /> |
| <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthWindConnectionString %>" |
| SelectCommand="SELECT [ProductID], [ProductName], [SupplierID] FROM [Alphabetical list of products]"> |
| </asp:SqlDataSource> |
JS:
| <script type="text/javascript" > |
| function OnColumnClick(sender, eventArgs) |
| { |
| __doPostBack("<%= RadGrid1.UniqueID %>", "ColumnClicked:" + eventArgs.get_gridColumn().get_uniqueName()); |
| } |
| </script> |
CS:
| protected override void RaisePostBackEvent(IPostBackEventHandler source, string eventArgument) |
| { |
| base.RaisePostBackEvent(source, eventArgument); |
| if (source == this.RadGrid1 && eventArgument.IndexOf("ColumnClicked") != -1) |
| { |
| string strUniqueName = eventArgument.Split(':')[1]; |
| ArrayList arrClickedColumn; |
| if (Session["arrClickedColumn"] == null) |
| { |
| arrClickedColumn = new ArrayList(); |
| } |
| else |
| { |
| arrClickedColumn = (ArrayList)Session["arrClickedColumn"]; |
| } |
| if (!arrClickedColumn.Contains(strUniqueName)) |
| arrClickedColumn.Add(strUniqueName); |
| Session["arrClickedColumn"] = arrClickedColumn; |
| if (RadGrid1.MasterTableView.GroupByExpressions.Count > 0) |
| { |
| bool newGroup = true; |
| int GroupIndex; |
| for (GroupIndex = 0; GroupIndex < RadGrid1.MasterTableView.GroupByExpressions.Count; GroupIndex++) |
| { |
| if (RadGrid1.MasterTableView.GroupByExpressions[GroupIndex].Expression.Contains(strUniqueName)) |
| newGroup = false; |
| } |
| if (Session["arrClickedColumn"] != null) |
| { |
| ArrayList arrColumns = (ArrayList)Session["arrClickedColumn"]; |
| int arrColumnCount; |
| if (newGroup == true) |
| { |
| arrColumnCount = arrColumns.Count - 1; |
| AddGroup(strUniqueName); |
| strUniqueName = string.Empty; |
| } |
| else |
| arrColumnCount = arrColumns.Count; |
| int columnCount; |
| for (columnCount = 0; columnCount < arrColumnCount; columnCount++) |
| { |
| if (arrColumns[columnCount].ToString() == strUniqueName) |
| { |
| string strGrpexp = strUniqueName + " " + "Group By" + " " + strUniqueName; |
| RadGrid1.MasterTableView.GroupByExpressions.Remove(strGrpexp); |
| strUniqueName = string.Empty; |
| } |
| } |
| } |
| } |
| else |
| { |
| AddGroup(strUniqueName); |
| } |
| RadGrid1.Rebind(); |
| } |
| } |
| private void AddGroup(string strUniqueName) |
| { |
| if (strUniqueName != String.Empty) |
| { |
| GridGroupByExpression expression = new GridGroupByExpression(); |
| GridGroupByField gridGroupByField = new GridGroupByField(); |
| gridGroupByField = new GridGroupByField(); |
| gridGroupByField.FieldName = strUniqueName; |
| gridGroupByField.HeaderText = strUniqueName; |
| expression.SelectFields.Add(gridGroupByField); |
| expression.GroupByFields.Add(gridGroupByField); |
| RadGrid1.MasterTableView.GroupByExpressions.Add(expression); |
| strUniqueName = string.Empty; |
| } |
| } |
Set AllowSorting to false if you don't want this functionality.
Regards
Shinu
0
Ross
Top achievements
Rank 1
answered on 06 Mar 2009, 11:50 AM
This code is exactly what I need, however i'm trying to implement it in a user control.
My code is pretty much the same as above, with minor changes as it's a user control:
However RaisePostBackEvent is never called. I'm guessing my problem is with the javascript.
I've read through a number of threads but i'm not getting anywhere, any ideas?
Thanks, Ross
My code is pretty much the same as above, with minor changes as it's a user control:
| public partial class Products_ProductSearch : System.Web.UI.UserControl, IPostBackEventHandler |
| { |
| public void RaisePostBackEvent(string eventArgument) |
| { |
| //do stuff |
| } |
| } |
However RaisePostBackEvent is never called. I'm guessing my problem is with the javascript.
I've read through a number of threads but i'm not getting anywhere, any ideas?
Thanks, Ross
0
Richard
Top achievements
Rank 1
answered on 06 Mar 2009, 01:31 PM
I have discovered the other option is to utilise the AllowCustomSorting property and use the SortCommand event Handler.