I have a Hierarchical RADGrid...
That I "adjust" using code-behind...
The result is attached...
I want to add 'Google-like filtering' but I only need to filter on the 'Account Description' column (at each level).
I looked at the Telerik.Web.Examples.Integration.GridAndCombo example and tried to use it as a jumping off point but since it isn't a hierarchical grid i started running into walls.
Can you please point me in the right direction?
<telerik:RadGrid ID="RadGrid1" runat="server" GridLines="None" Width="900px" OnNeedDataSource="RadGrid1_NeedDataSource" oncolumncreated="RadGrid1_ColumnCreated" AutoGenerateHierarchy="true" AutoGenerateColumns="true" > </telerik:RadGrid>That I "adjust" using code-behind...
protected void RadGrid1_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e) { this.RadGrid1.DataSource = CreateDataSet(); } private DataSet CreateDataSet() { DataSet dataset = new DataSet(); string previousFY = string.Empty; string currentFY = string.Empty; if (DateTime.Now.Month >= 7) { previousFY = DateTime.Now.Year.ToString(); currentFY = (DateTime.Now.Year + 1).ToString(); } else { previousFY = (DateTime.Now.Year - 1).ToString(); currentFY = DateTime.Now.Year.ToString(); } OpenDataDataContext db = new OpenDataDataContext(); // FUND var prevFYFundTotals = from t in db.open_FY_Totals join f in db.Funds on new { Fund = t.Fund } equals new { Fund = f.fieldcode } where t.FY == currentFY group new { t, f } by new { t.FY, Fund = t.Fund.Substring(0, 2) } into g orderby g.Key.FY, g.Key.Fund select new { g.Key.FY, g.Key.Fund, Fund_Desc = g.Max(p => p.f.desc30), Budget = String.Format("{0:$#,0.00}", (System.Decimal?)g.Sum(p => p.t.BudgetAmt)), Actual = String.Format("{0:$#,0.00}", (System.Decimal?)g.Sum(p => p.t.ActualAmt)), Encumbered = String.Format("{0:$#,0.00}", (System.Decimal?)g.Sum(p => p.t.EncAmt)), Committed = String.Format("{0:$#,0.00}", (System.Decimal?)(g.Sum(p => p.t.ActualAmt) + g.Sum(p => p.t.EncAmt))), PercentCommitted = String.Format("{0:0.00}%", (Decimal?)Convert.ToDecimal((g.Sum(p => p.t.ActualAmt) + g.Sum(p => p.t.EncAmt)) / g.Sum(p => p.t.BudgetAmt) * 100)), Remaining = String.Format("{0:$#,0.00}", (System.Decimal?)(g.Sum(p => p.t.BudgetAmt) - (g.Sum(p => p.t.ActualAmt) + g.Sum(p => p.t.EncAmt)))) }; DataTable dtPrevFYFundTotals = new DataTable(); dtPrevFYFundTotals.TableName = "PrevFYFundTotals"; dtPrevFYFundTotals.Columns.Add("Fund", typeof(string)); dtPrevFYFundTotals.Columns.Add("Fund_Desc", typeof(string)); dtPrevFYFundTotals.Columns.Add("Budget", typeof(string)); dtPrevFYFundTotals.Columns.Add("Actual", typeof(string)); dtPrevFYFundTotals.Columns.Add("Encumbered", typeof(string)); dtPrevFYFundTotals.Columns.Add("Committed", typeof(string)); dtPrevFYFundTotals.Columns.Add("PercentCommitted", typeof(string)); dtPrevFYFundTotals.Columns.Add("Remaining", typeof(string)); DataColumn[] keys = new DataColumn[1]; keys[0] = dtPrevFYFundTotals.Columns["Fund"]; dtPrevFYFundTotals.PrimaryKey = keys; dataset.Tables.Add(dtPrevFYFundTotals); foreach (var item in prevFYFundTotals) { dtPrevFYFundTotals.Rows.Add(new object[] { item.Fund, item.Fund_Desc, item.Budget, item.Actual, item.Encumbered, item.Committed, item.PercentCommitted, item.Remaining }); } // RESP var prevFYRespTotals = from t in db.open_FY_Totals join r in db.Resps on new { Resp = t.Resp } equals new { Resp = r.fieldcode } where t.FY == currentFY group new { t, r } by new { t.FY, Fund = t.Fund.Substring(0, 2), t.Resp } into g orderby g.Key.Fund, g.Key.Resp select new { Fund = g.Key.Fund.Substring(0, 2), Resp = g.Key.Resp.Replace(".", ""), Resp_Desc = g.Max(p => p.r.desc30), Budget = String.Format("{0:$#,0.00}", (System.Decimal?)g.Sum(p => p.t.BudgetAmt)), Actual = String.Format("{0:$#,0.00}", (System.Decimal?)g.Sum(p => p.t.ActualAmt)), Encumbered = String.Format("{0:$#,0.00}", (System.Decimal?)g.Sum(p => p.t.EncAmt)), Committed = String.Format("{0:$#,0.00}", (System.Decimal?)(g.Sum(p => p.t.ActualAmt) + g.Sum(p => p.t.EncAmt))), PercentCommitted = String.Format("{0:0.00}%", g.Sum(p => p.t.BudgetAmt) > 0 ? ((g.Sum(p => p.t.ActualAmt) + g.Sum(p => p.t.EncAmt)) / g.Sum(p => p.t.BudgetAmt)) * 100 : 0), Remaining = String.Format("{0:$#,0.00}", (System.Decimal?)(g.Sum(p => p.t.BudgetAmt) - (g.Sum(p => p.t.ActualAmt) + g.Sum(p => p.t.EncAmt)))) }; DataTable dtPrevFYRespTotals = new DataTable(); dtPrevFYRespTotals.TableName = "PrevFYRespTotals"; dtPrevFYRespTotals.Columns.Add("Fund", typeof(string)); dtPrevFYRespTotals.Columns.Add("Resp", typeof(string)); dtPrevFYRespTotals.Columns.Add("Resp_Desc", typeof(string)); dtPrevFYRespTotals.Columns.Add("Budget", typeof(string)); dtPrevFYRespTotals.Columns.Add("Actual", typeof(string)); dtPrevFYRespTotals.Columns.Add("Encumbered", typeof(string)); dtPrevFYRespTotals.Columns.Add("Committed", typeof(string)); dtPrevFYRespTotals.Columns.Add("PercentCommitted", typeof(string)); dtPrevFYRespTotals.Columns.Add("Remaining", typeof(string)); keys = new DataColumn[2]; keys[0] = dtPrevFYRespTotals.Columns["Fund"]; keys[1] = dtPrevFYRespTotals.Columns["Resp"]; dtPrevFYRespTotals.PrimaryKey = keys; dataset.Tables.Add(dtPrevFYRespTotals); foreach (var item in prevFYRespTotals) { dtPrevFYRespTotals.Rows.Add(new object[] { item.Fund, item.Resp, item.Resp_Desc, item.Budget, item.Actual, item.Encumbered, item.Committed, item.PercentCommitted, item.Remaining }); } //OBJECT var prevFYObjTotals = from t in db.open_FY_Totals join o in db.Object_Mgts on new { Obj = t.Obj } equals new { Obj = o.fieldcode } where t.FY == currentFY group new { t, o } by new { t.FY, Fund = t.Fund.Substring(0, 2), t.Resp, t.Obj } into g orderby g.Key.Fund, g.Key.Resp, g.Key.Obj select new { Fund = g.Key.Fund.Substring(0, 2), Resp = g.Key.Resp.Replace(".", ""), Obj = g.Key.Obj.Replace(".", ""), Obj_Desc = g.Max(p => p.o.desc30), Budget = String.Format("{0:$#,0.00}", (System.Decimal?)g.Sum(p => p.t.BudgetAmt)), Actual = String.Format("{0:$#,0.00}", (System.Decimal?)g.Sum(p => p.t.ActualAmt)), Encumbered = String.Format("{0:$#,0.00}", (System.Decimal?)g.Sum(p => p.t.EncAmt)), Committed = String.Format("{0:$#,0.00}", (System.Decimal?)(g.Sum(p => p.t.ActualAmt) + g.Sum(p => p.t.EncAmt))), PercentCommitted = String.Format("{0:0.00}%", g.Sum(p => p.t.BudgetAmt) > 0 ? ((g.Sum(p => p.t.ActualAmt) + g.Sum(p => p.t.EncAmt)) / g.Sum(p => p.t.BudgetAmt)) * 100 : 0), Remaining = String.Format("{0:$#,0.00}", (System.Decimal?)(g.Sum(p => p.t.BudgetAmt) - (g.Sum(p => p.t.ActualAmt) + g.Sum(p => p.t.EncAmt)))) }; DataTable dtPrevFYObjTotals = new DataTable(); dtPrevFYObjTotals.TableName = "PrevFYObjTotals"; dtPrevFYObjTotals.Columns.Add("Fund", typeof(string)); dtPrevFYObjTotals.Columns.Add("Resp", typeof(string)); dtPrevFYObjTotals.Columns.Add("Obj", typeof(string)); dtPrevFYObjTotals.Columns.Add("Obj_Desc", typeof(string)); dtPrevFYObjTotals.Columns.Add("Budget", typeof(string)); dtPrevFYObjTotals.Columns.Add("Actual", typeof(string)); dtPrevFYObjTotals.Columns.Add("Encumbered", typeof(string)); dtPrevFYObjTotals.Columns.Add("Committed", typeof(string)); dtPrevFYObjTotals.Columns.Add("PercentCommitted", typeof(string)); dtPrevFYObjTotals.Columns.Add("Remaining", typeof(string)); keys = new DataColumn[3]; keys[0] = dtPrevFYObjTotals.Columns["Fund"]; keys[1] = dtPrevFYObjTotals.Columns["Resp"]; keys[2] = dtPrevFYObjTotals.Columns["Obj"]; dtPrevFYObjTotals.PrimaryKey = keys; dataset.Tables.Add(dtPrevFYObjTotals); foreach (var item in prevFYObjTotals) { dtPrevFYObjTotals.Rows.Add(new object[] { item.Fund, item.Resp, item.Obj, item.Obj_Desc, item.Budget, item.Actual, item.Encumbered, item.Committed, item.PercentCommitted, item.Remaining }); } // Create Relationships // Fund DataTable to Resp DataTable relationship DataRelation FundRespRelation = new DataRelation("FundResp", dataset.Tables["PrevFYFundTotals"].Columns["Fund"], dataset.Tables["PrevFYRespTotals"].Columns["Fund"]); // Resp DataTable to Obj DataTable DataRelation RespObjRelation = new DataRelation("RespObj", dataset.Tables["PrevFYRespTotals"].Columns["Resp"], dataset.Tables["PrevFYObjTotals"].Columns["Resp"]); // there may not be records all the way down... dataset.EnforceConstraints = false; dataset.Relations.Add(FundRespRelation); dataset.Relations.Add(RespObjRelation); return dataset; } protected void RadGrid1_ColumnCreated(object sender, GridColumnCreatedEventArgs e) { if (e.Column.UniqueName == "Fund") e.Column.Visible = false; else if (e.Column.UniqueName == "Resp") e.Column.Visible = false; else if (e.Column.UniqueName == "Obj") e.Column.Visible = false; else if (e.Column.HeaderText.Contains("Desc")) { e.Column.HeaderText = "Account Description"; e.Column.HeaderStyle.HorizontalAlign = HorizontalAlign.Center; e.Column.HeaderStyle.VerticalAlign = VerticalAlign.Bottom; if (e.OwnerTableView.Name == "") e.Column.HeaderStyle.Width = Unit.Pixel(350); else if (e.OwnerTableView.Name == "PrevFYRespTotals") e.Column.HeaderStyle.Width = Unit.Pixel(265); else e.Column.HeaderStyle.Width = Unit.Pixel(240); } else if (e.Column.HeaderText == "Budget") { e.Column.HeaderText = "Annual Budget"; e.Column.HeaderStyle.HorizontalAlign = HorizontalAlign.Right; e.Column.HeaderStyle.VerticalAlign = VerticalAlign.Bottom; e.Column.HeaderStyle.Width = Unit.Pixel(100); e.Column.ItemStyle.HorizontalAlign = HorizontalAlign.Right; } else if (e.Column.HeaderText == "Actual") { e.Column.HeaderText = "Actual Spent"; e.Column.HeaderStyle.HorizontalAlign = HorizontalAlign.Right; e.Column.HeaderStyle.VerticalAlign = VerticalAlign.Bottom; e.Column.HeaderStyle.Width = Unit.Pixel(100); e.Column.ItemStyle.HorizontalAlign = HorizontalAlign.Right; } else if (e.Column.HeaderText == "Encumbered") { e.Column.HeaderText = "Unpaid Purchase Orders"; e.Column.HeaderStyle.HorizontalAlign = HorizontalAlign.Right; e.Column.HeaderStyle.VerticalAlign = VerticalAlign.Bottom; e.Column.HeaderStyle.Width = Unit.Pixel(100); e.Column.ItemStyle.HorizontalAlign = HorizontalAlign.Right; } else if (e.Column.HeaderText == "Committed") { e.Column.HeaderText = "Total Committed"; e.Column.HeaderStyle.HorizontalAlign = HorizontalAlign.Right; e.Column.HeaderStyle.VerticalAlign = VerticalAlign.Bottom; e.Column.HeaderStyle.Width = Unit.Pixel(100); e.Column.ItemStyle.HorizontalAlign = HorizontalAlign.Right; } else if (e.Column.HeaderText == "Percent Committed") { e.Column.HeaderText = "Percent Committed"; e.Column.HeaderStyle.HorizontalAlign = HorizontalAlign.Right; e.Column.HeaderStyle.VerticalAlign = VerticalAlign.Bottom; e.Column.HeaderStyle.Width = Unit.Pixel(50); e.Column.ItemStyle.HorizontalAlign = HorizontalAlign.Right; } else if (e.Column.HeaderText == "Remaining") { e.Column.HeaderText = "Remaining Budget"; e.Column.HeaderStyle.HorizontalAlign = HorizontalAlign.Right; e.Column.HeaderStyle.VerticalAlign = VerticalAlign.Bottom; e.Column.HeaderStyle.Width = Unit.Pixel(100); e.Column.ItemStyle.HorizontalAlign = HorizontalAlign.Right; } }The result is attached...
I want to add 'Google-like filtering' but I only need to filter on the 'Account Description' column (at each level).
I looked at the Telerik.Web.Examples.Integration.GridAndCombo example and tried to use it as a jumping off point but since it isn't a hierarchical grid i started running into walls.
Can you please point me in the right direction?