
Requirements:
We need to build a self-referencing RadGrid with custom columns (ca 200 - 500 columns), inline editing and yahoo scrolling (ca 500 - 5000 rows).
The grid datasource should have 24 x 5 = 120 columns at least but the grid itself should show at least 24 columns (2 years = 2 x 12 months).
However, each row should show the content of 5 fields (that's why we need overall 24 x 5 = 120 columns).
The user should be able to edit only 1 of the 5 fields per row. We tried double edit click, but for performance reason, it didnt work well.
To improve performance and for better usability, the user shouldnt wait before all the rows are rendered before editing them.
The grid shows tasks with level and outline numbers. The user want to see a hierarchy, so he can collapse/expand task from any level.
See the picture "preview" in attachment to see how the grid currently looks
Problem:
We could successfully implement the grid with custom column, inline editing and yahoo scrolling. Everything so far is working fine.
Our only problem now is to make the grid self-referencing.
When trying this, we have an Error "System.OutOfMemoryException".
When debugging, we found that, this error occurs just after RadGrid1_NeedDataSource in RadGrid1_ColumnCreated
We suspect that the problem has to do with the huge amount of columns (around 100) and the fact that we enable self-referencing.
Any Idea or suggestions?
Code:
The grid is created programmatically because the columns are created dynamically.
aspx : The grid will be later added in PlaceHolder1
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" OnAjaxRequest="RadAjaxManager1_AjaxRequest"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="RadGrid1"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1"/> <telerik:AjaxUpdatedControl ControlID="Label1" /> </UpdatedControls> </telerik:AjaxSetting> <telerik:AjaxSetting AjaxControlID="RadAjaxManager1"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1" /> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings> <ClientEvents /> </telerik:RadAjaxManager> <telerik:RadAjaxLoadingPanel runat="server" ID="RadAjaxLoadingPanel1" Height="75px" Width="75px" Transparency="25"/> <telerik:RadAjaxPanel runat="server" ID="RadAjaxPanel1" LoadingPanelID="RadAjaxLoadingPanel1"> <asp:PlaceHolder runat="server" ID="PlaceHolder1" > </asp:PlaceHolder> <br /> <asp:Label ID="L_Text_LastChange" runat="server" Text="Last change on: " CssClass="labelText"></asp:Label> </telerik:RadAjaxPanel>protected void Page_Init(object sender, EventArgs e) { RadGrid1.ID = "RadGrid1"; RadGrid1.AllowMultiRowEdit = true; RadGrid1.AllowMultiRowSelection = true; RadGrid1.GroupingEnabled = true; RadGrid1.Skin = "Windows7"; RadGrid1.Width = Unit.Percentage(97); //the initial amount of rows to show RadGrid1.PageSize = 20;//20 RadGrid1.AllowPaging = true; RadGrid1.AllowSorting = true; RadGrid1.PagerStyle.Mode = GridPagerMode.NextPrevAndNumeric; RadGrid1.AutoGenerateColumns = false; RadGrid1.GridLines = GridLines.None; RadGrid1.ShowFooter = false; //PagerStyle RadGrid1.PagerStyle.Visible = false; //MasterTableView RadGrid1.MasterTableView.TableLayout = GridTableLayout.Fixed; RadGrid1.MasterTableView.AutoGenerateColumns = true; RadGrid1.MasterTableView.EditMode = GridEditMode.InPlace; //ClientSettings RadGrid1.ClientSettings.Scrolling.ScrollHeight = Unit.Pixel(350);//350 //Yahoo Scrolling RadGrid1.ClientSettings.Scrolling.AllowScroll = true; RadGrid1.ClientSettings.Scrolling.UseStaticHeaders = true; RadGrid1.ClientSettings.Scrolling.SaveScrollPosition = true; RadGrid1.ClientSettings.ClientEvents.OnScroll = "HandleScrolling"; //Because of ClientSelectColumn RadGrid1.ClientSettings.Selecting.AllowRowSelect = true; //Custom row selection RadGrid1.ClientSettings.ClientEvents.OnRowSelected = "SelectRows"; RadGrid1.ClientSettings.ClientEvents.OnRowDeselected = "DeSelectRows"; //Add editColumn RadGrid1.MasterTableView.DataKeyNames = new string[] { "ID", STR_TaskOutlineNumber, ColName_TaskName, STR_TaskLevel, "SAPInternalIDTask", "SAPSystem", STR_HasChanged, STR_ColumnChanged }; RadGrid1.MasterTableView.ClientDataKeyNames = RadGrid1.MasterTableView.DataKeyNames; //Add custom column addCustomColumns(RadGrid1, gridSource); //Set Grid Events RadGrid1.PreRender += new EventHandler(RadGrid1_PreRender); RadGrid1.ColumnCreated += new GridColumnCreatedEventHandler(RadGrid1_ColumnCreated); RadGrid1.UpdateCommand += new GridCommandEventHandler(RadGrid1_UpdateCommand); RadGrid1.NeedDataSource += new GridNeedDataSourceEventHandler(RadGrid1_NeedDataSource); //Add the grid to the placeholder this.PlaceHolder1.Controls.Add(RadGrid1); //TODO: Not working, throw error "System.OutOfMemoryException", need help here!!! //Build self-referencing //RadGrid1.MasterTableView.HierarchyLoadMode = GridChildLoadMode.Client; //RadGrid1.MasterTableView.HierarchyDefaultExpanded = true; //RadGrid1.MasterTableView.SelfHierarchySettings.ParentKeyName = "ParentNr"; //RadGrid1.MasterTableView.SelfHierarchySettings.KeyName = "Nr"; //RadGrid1.ClientSettings.AllowExpandCollapse = true; }protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { //Init values when the page is being loaded or accessed for the first time initValues(); initLabels(); // this would bind the grid calling NeedDataSource RadGrid1.Rebind(); } }RadGrid1_NeedDataSource
protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e) { RadGrid1.DataSource = gridSource; }RadGrid1_ColumnCreated
protected void RadGrid1_ColumnCreated(object sender, Telerik.Web.UI.GridColumnCreatedEventArgs e) { GridBoundColumn boundColumn = e.Column as GridBoundColumn; //Hide all columns, they will be made visible again later if (boundColumn != null) boundColumn.Visible = false; }
Hello,
Long story in short way -- please take a look at presentation:
http://www.telerik.com/help/aspnet-ajax/understandingtypesstackedbar.html
The text of items are next to each part of bar, how I can achieve this?
My case: in my case texts from both series are displayed next to last (top) parts of bars. I tried to add
<Appearance>
<TextAppearance Position-Auto=false Position-AlignedPosition="Bottom"</TextAppearance>
</Appearance>
in ChartSeries section, but no matter what I enter -- bottom, top, etc. nothing is changing.
Thank you in advance for help.
Remark: Telerik, please expand your documentation and simply add code that produces given screenshots, it is a bit frustrating when you see exactly want you want to achieve, and yet you struggle to do this having only few hints. Thank you.