or
Hi, We are using Radgrid and defining columns along with widths at design time like this: <telerik:RadGrid ID="RadGrid1" runat="server" AllowSorting="True" AutoGenerateColumns="False" CellSpacing="0" GridLines="None" GroupingEnabled="False" Height="215px" Width="99%" OnItemCommand=" RadGrid1_ItemCommand" OnItemDataBound="RadGrid1_ItemDataBound" OnPreRender="RadGrid1_PreRender" OnUnload="RadGrid1_Unload" OnBiffExporting="RadGrid1_BiffExporting"> <ExportSettings ExportOnlyData="True" HideStructureColumns="True" OpenInNewWindow="True" FileName="TransactionSummary"> <Excel Format="Biff" AutoFitImages="True" /> </ExportSettings> <ClientSettings AllowExpandCollapse="False" AllowGroupExpandCollapse="False"> <Selecting EnableDragToSelectRows="False" /> <Scrolling AllowScroll="True" /> <Resizing AllowColumnResize="True" ShowRowIndicatorColumn="False" /> </ClientSettings> <MasterTableView DataKeyNames="TransactionID" AllowNaturalSort="false"> <CommandItemSettings ExportToPdfText="Export to PDF"></CommandItemSettings> <Columns> <telerik:GridBoundColumn AllowFiltering="False" DataField="TransactionID" Groupable="False" HeaderText="ID" ReadOnly="True" Reorderable="False" ShowFilterIcon="False" UniqueName="TransactionID" HeaderStyle-Width="5%" HeaderTooltip="Transaction ID Number" HeaderButtonType="None"> <HeaderStyle Width="5%" /> <ItemStyle HorizontalAlign="Left" Wrap="false" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn AllowFiltering="False" DataField="Status" Groupable="False" HeaderText="Status" ReadOnly="True" Reorderable="False" ShowFilterIcon="False" UniqueName="Status" HeaderStyle-Width="8%" HeaderTooltip="Status" HeaderButtonType="None"> <HeaderStyle Width="8%" /> <ItemStyle HorizontalAlign="Left" /> </telerik:GridBoundColumn> My grid has around 13 columns, but only 10 are set to display true. Out of 3 (display – false), one column gets to be shown when user clicks on button to show it. Some of the column’s display property is set to false. So, initially when grid is loaded which ever the columns are displayed, we made sure their total width comes to 99%. At run time based on some conditions, we are setting one of the column to be displayed. In order to display, we are adjusting the widths of columns by taking total visible columns like this: double colPercentChange = (double)13 / colCnt; foreach (GridColumn col in pRgdTrans.Columns) { if (col.Display == true) { double colWidthPercent = (double)col.HeaderStyle.Width.Value; // gridWidth; col.HeaderStyle.Width = Unit.Percentage(colWidthPercent - colPercentChange); col.ItemStyle.Width = Unit.Percentage(colWidthPercent - colPercentChange); } } For all the columns it is working fine except TrnsactionID which is DataKey. The column width is getting doubled every time I click on button to make that column visible. All the columns are gridbound columns or template columns. I appreciate your response. Thanks, Katta<telerik:RadGrid ID="CollectionsRadGrid" runat="server" OnNeedDataSource="CollectionsRadGrid_NeedDataSource" OnItemCommand="CollectionsRadGrid_ItemCommand" OnItemCreated="CollectionsRadGrid_ItemCreated"> <MasterTableView DataKeyNames="CollectionID" AutoGenerateColumns="false" CommandItemDisplay="Top" EditMode="EditForms"> <CommandItemTemplate> <telerik:RadToolBar ID="CollectionsRadToolBar" runat="server" AutoPostBack="true"> <Items> <telerik:RadToolBarButton Text="Add a new collection" ImageUrl="/Public/Images/icon-add.png" CommandName="InitInsert" /> </Items> </telerik:RadToolBar> </CommandItemTemplate> <Columns> <telerik:GridBoundColumn HeaderText="Reference" DataField="Reference" ReadOnly="true" /> <telerik:GridTemplateColumn HeaderText="Site"> <ItemTemplate> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridBoundColumn HeaderText="Collection Date" /> <telerik:GridTemplateColumn HeaderText="Items"> <ItemTemplate> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn HeaderText="Options"> <ItemTemplate> </ItemTemplate> </telerik:GridTemplateColumn> </Columns> <EditFormSettings EditFormType="Template"> <FormTemplate> <asp:Panel ID="InnerContainerPanel" runat="server" CssClass="innerContainer"> <div class="nonTabPage"> <telerik:RadToolBar ID="RadToolBar1" runat="server" AutoPostBack="true" Width="100%"> <Items> <telerik:RadToolBarButton Text='<%# (this.GetGridEditFormItem(Container) is GridEditFormInsertItem) ? "Insert" : "Update" %>' CommandName='<%# (this.GetGridEditFormItem(Container) is GridEditFormInsertItem) ? "PerformInsert" : "Update" %>' /> <telerik:RadToolBarButton Text="Cancel" CommandName="Cancel" /> </Items> </telerik:RadToolBar> <p> <table cellspacing="0" cellpadding="0" width="100%"> <tr> <td valign="bottom"> <asp:Label runat="server" Text="Site: " /> <telerik:RadComboBox ID="SiteListBox" runat="server" EmptyMessage="Please Select" /> </td> <td align="right"> <asp:Label runat="server" Text="Collection Date: " /> <asp:Label ID="CollectionDateLabel" runat="server" Text='<%#(string.IsNullOrEmpty(Eval("CollectedDate").ToString()) ? "TBC" : Eval("CollectedDate", "dd/MM/yyyy")) %>' /> </td> </tr> </table> </p> <p> <telerik:RadGrid ID="CollectionItemsRadGrid" runat="server" OnItemCommand="CollectionItemsRadGrid_ItemCommand" OnInsertCommand="CollectionItemsRadGrid_InsertCommand" OnNeedDataSource="CollectionItemsRadGrid_NeedDataSource"> <MasterTableView DataKeyNames="InItemID" AutoGenerateColumns="false" CommandItemDisplay="Top" EditMode="InPlace"> <CommandItemTemplate> <telerik:RadToolBar ID="RadToolBar1" runat="server" AutoPostBack="true"> <Items> <telerik:RadToolBarButton Text="Add a new item" ImageUrl="/Public/Images/icon-add.png" CommandName="InitInsert" /> </Items> </telerik:RadToolBar> </CommandItemTemplate> <Columns> <telerik:GridTemplateColumn HeaderText="Item Type"> <ItemTemplate> <%# Eval("tblItemType.Description") %> </ItemTemplate> <EditItemTemplate> <telerik:RadComboBox ID="ItemTypeCombo" runat="server" EmptyMessage="Please Select" /> </EditItemTemplate> </telerik:GridTemplateColumn> <telerik:GridNumericColumn DataField="PlannedQty" HeaderText="Quantity" NumericType="Number" /> <telerik:GridEditCommandColumn ButtonType="ImageButton" UniqueName="EditCommandColumn"> <%--<ItemStyle CssClass="MyImageButton"></ItemStyle>--%> </telerik:GridEditCommandColumn> <telerik:GridButtonColumn ConfirmText="Delete this item?" ConfirmDialogType="RadWindow" ConfirmTitle="Delete" ButtonType="ImageButton" CommandName="Delete" Text="Delete" UniqueName="DeleteColumn"> <%--<ItemStyle HorizontalAlign="Center" CssClass="MyImageButton"></ItemStyle>--%> </telerik:GridButtonColumn> </Columns> </MasterTableView> </telerik:RadGrid> </p> </div> </asp:Panel> </FormTemplate> </EditFormSettings> </MasterTableView></telerik:RadGrid>/// <summary>/// Gets or sets the quote object from session/// </summary>protected tblQuote CurrentQuote{ get { return this.Session["CurrentQuote"] as tblQuote; } set { this.Session["CurrentQuote"] = value; }}/// <summary>/// Gets or sets the current collection object from session/// </summary>protected tblCollection CurrentCollection{ get { return this.Session["CurrentCollection"] as tblCollection; } set { this.Session["CurrentCollection"] = value; }}#region Collections/// <summary>/// The collections radgrid need data source event/// </summary>/// <param name="sender">The sender</param>/// <param name="e">The event args</param>protected void CollectionsRadGrid_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e){ this.CollectionsRadGrid.DataSource = CurrentQuote.tblJob.tblCollection.ToList();}/// <summary>/// Collections radgrid item command event/// </summary>/// <param name="sender">The sender</param>/// <param name="e">The event args</param>protected void CollectionsRadGrid_ItemCommand(object sender, GridCommandEventArgs e){ if (e.CommandName == RadGrid.InitInsertCommandName) { this.CurrentCollection = new tblCollection() { JobID = this.CurrentQuote.JobID, CreateDate = DateTime.Now, tblItemsIn = new List<tblItemsIn>() }; } if (e.CommandName == RadGrid.EditCommandName) { int collectionId = (int)this.CollectionsRadGrid.MasterTableView.Items[e.Item.ItemIndex].GetDataKeyValue("CollectionID"); this.CurrentCollection = this.CurrentQuote.tblJob.tblCollection.Single(o => o.CollectionID == collectionId); }}/// <summary>/// Collections radgrid item created event/// </summary>/// <param name="sender">The sender</param>/// <param name="e">The event args</param>protected void CollectionsRadGrid_ItemCreated(object sender, Telerik.Web.UI.GridItemEventArgs e){ if (e.Item is GridEditableItem && e.Item.IsInEditMode) { RadGrid collectionItemsRadGrid = (RadGrid)e.Item.FindControl("CollectionItemsRadGrid"); collectionItemsRadGrid.Rebind(); }}#endregion#region Collection Items/// <summary>/// The collection items radgrid need datasource event/// </summary>/// <param name="sender">The sender</param>/// <param name="e">The event args</param>protected void CollectionItemsRadGrid_NeedDataSource(object sender, GridNeedDataSourceEventArgs e){ ((RadGrid)sender).DataSource = this.CurrentCollection.tblItemsIn.ToList();}protected void CollectionItemsRadGrid_ItemCommand(object sender, GridCommandEventArgs e){}#endregion/// <summary>/// Gets the grid data item by traversing up the control hierarchy/// </summary>/// <param name="sender">The object contained in the FormTemplate</param>/// <returns>The GridEditFormItem</returns>protected GridEditFormItem GetGridEditFormItem(Control sender){ Control currentItem = sender; while (!(currentItem is GridEditFormItem)) { if (currentItem.Parent == null) { return null; } currentItem = currentItem.Parent; } return (GridEditFormItem)currentItem;}protected void CollectionItemsRadGrid_InsertCommand(object sender, GridCommandEventArgs e){ GridEditableItem item = (GridEditableItem)e.Item; tblItemsIn newItem = new tblItemsIn(); item.UpdateValues(newItem); this.CurrentCollection.tblItemsIn.Add(newItem);}
<table class="layout"> <tr> <td> <telerik:RadComboBox ID="Family" runat="server" Width="150" EmptyMessage="FamÃlia" EnableLoadOnDemand="True" ShowMoreResultsBox="true" EnableVirtualScrolling="true" OnItemsRequested="FamilyItemsRequested" AutoPostBack="True"> </telerik:RadComboBox> </td> <td> <telerik:RadComboBox ID="Genus" runat="server" Width="150" EmptyMessage="Género" EnableLoadOnDemand="True" ShowMoreResultsBox="true" EnableVirtualScrolling="true" OnItemsRequested="GenusItemsRequested" AutoPostBack="True"> </telerik:RadComboBox> </td> <td> <telerik:RadComboBox ID="Species" runat="server" Width="150" EmptyMessage="Espécie" EnableLoadOnDemand="True" ShowMoreResultsBox="true" EnableVirtualScrolling="true" OnItemsRequested="SpeciesItemsRequested" AutoPostBack="True"> </telerik:RadComboBox> </td> </tr></table><asp:HiddenField ID="SelectedTaxonId" runat="server" /><asp:HiddenField ID="SelectedTaxonName" runat="server" /> <telerik:RadAjaxManagerProxy ID="ajaxProx" runat="server"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="Family"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="Genus" UpdatePanelCssClass="" /> <telerik:AjaxUpdatedControl ControlID="Species" UpdatePanelCssClass="" /> <telerik:AjaxUpdatedControl ControlID="SelectedTaxonId" UpdatePanelCssClass="" /> <telerik:AjaxUpdatedControl ControlID="SelectedTaxonName" UpdatePanelCssClass="" /> </UpdatedControls> </telerik:AjaxSetting> <telerik:AjaxSetting AjaxControlID="Genus"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="Species" UpdatePanelCssClass="" /> <telerik:AjaxUpdatedControl ControlID="SelectedTaxonId" UpdatePanelCssClass="" /> <telerik:AjaxUpdatedControl ControlID="SelectedTaxonName" UpdatePanelCssClass="" /> </UpdatedControls> </telerik:AjaxSetting> <telerik:AjaxSetting AjaxControlID="Species"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="SelectedTaxonId" UpdatePanelCssClass="" /> <telerik:AjaxUpdatedControl ControlID="SelectedTaxonName" UpdatePanelCssClass="" /> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings></telerik:RadAjaxManagerProxy>