or

<telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="False" AllowSorting="False" AllowMultiRowSelection="False" AllowPaging="False" OnNeedDataSource="RadGrid1_NeedDataSource" OnDetailTableDataBind="RadGrid1_DetailTableDataBind" Skin="Default"> <MasterTableView DataKeyNames="col1" ExpandCollapseColumn-ButtonType="PushButton"> <DetailTables> <telerik:GridTableView Name="detailGrid" Width="95%" BorderStyle="Solid" BorderWidth="1px" HorizontalAlign="Center"> <Columns> <telerik:GridBoundColumn HeaderText="col1" HeaderButtonType="TextButton" DataField="col1" /> <telerik:GridBoundColumn HeaderText="col2" HeaderButtonType="TextButton" DataField="col2" /> </Columns> </telerik:GridTableView> </DetailTables> <Columns>.....

<telerik:RadFilter runat="server" ID="RadFilter1" FilterContainerID="RadGrid1"></telerik:RadFilter><telerik:RadFilter runat="server" ID="RadFilter1" DataSourceControlID="EntityDataSourceCustomers" OnApplyExpressions="RadFilter1_ApplyExpressions"></telerik:RadFilter><telerik:RadGrid ID="dtgBuildingSizes" runat="server" AllowPaging="true" AllowSorting="true" AllowFilteringByColumn="true" ShowFooter="true" AutoGenerateColumns="false" EnableHeaderContextMenu="true" EnableHeaderContextFilterMenu="true" PageSize="5" AllowMultiRowEdit="true" Width="100%" EnableLinqExpressions="false" OnNeedDataSource="dtgBuildingSizes_NeedDataSource" OnItemDataBound="dtgBuildingSizes_ItemDataBound" OnPreRender="dtgBuildingSizes_PreRender" OnItemCommand="dtgBuildingSizes_ItemCommand"> <MasterTableView DataKeyNames="Id" EditMode="InPlace" IsFilterItemExpanded="false"> <Columns> <telerik:GridBoundColumn UniqueName="SizeTypeDescr" DataField="SizeTypeDescr" HeaderText="<%$ Resources: SizeType %>" ReadOnly="true" /> <telerik:GridNumericColumn UniqueName="Size" DataField="Size" DataType="System.Decimal" ItemStyle-HorizontalAlign="Right" HeaderStyle-HorizontalAlign="Right" HeaderText="<%$ Resources:RpaControlCaptions, lblSize %>" /> <telerik:GridButtonColumn UniqueName="Delete" CommandName="Delete" ButtonCssClass="rgDel" ButtonType="LinkButton" ItemStyle-HorizontalAlign="Right" ShowInEditForm="true" ConfirmText="<%$ Resources: AreYouSureYouWantToDeleteThisSize %>" /> </Columns> </MasterTableView></telerik:RadGrid>protected void dtgBuildingSizes_PreRender(object sender, EventArgs e){ //initially set appropriate size grid rows to edit mode if (!IsPostBack) dtgBuildingSizes.SetSizesGridToEditMode();}protected void dtgBuildingSizes_NeedDataSource(object sender, TelerikUI.GridNeedDataSourceEventArgs e){ var dataSource = ((BuildingEntity)CurrentBusinessEntity).Sizes; dtgBuildingSizes.DataSource = dataSource; dtgBuildingSizes.VirtualItemCount = dataSource.Count;}protected void dtgBuildingSizes_ItemDataBound(object sender, TelerikUI.GridItemEventArgs e){ if (e.Item is TelerikUI.GridDataItem) { TelerikUI.GridDataItem dataItem = (TelerikUI.GridDataItem)e.Item; //show/hide delete button based on availability for the size type BuildingSizeEntity entity = (BuildingSizeEntity)dataItem.DataItem; dataItem["Delete"].Controls[0].Visible = entity.IsDeletable; }}protected void dtgBuildingSizes_ItemCommand(object sender, TelerikUI.GridCommandEventArgs e){ switch (e.CommandName) { case RadGrid.DeleteCommandName: if (e.Item is TelerikUI.GridDataItem) { //remove the selected entity from the collection TelerikUI.GridDataItem dataItem = (TelerikUI.GridDataItem)e.Item; BuildingSizeEntity deletedEntity = GetSizeEntityForGridItem(dataItem); ((BuildingEntity)CurrentBusinessEntity).Sizes.Remove(deletedEntity); } break; default: if (ControlsUtil.IsRebindNeededForRadGridCommand(e.CommandName)) { //save previous edits before rebind PostAllSizeData(); //execute command and place grid back into edit mode e.ExecuteCommand(sender); dtgBuildingSizes.SetSizesGridToEditMode(); e.Canceled = true; //no further processing required } break; }}public static bool IsRebindNeededForRadGridCommand(string commandName){ switch (commandName) { // Editing case RadGrid.CancelAllCommandName: case RadGrid.CancelCommandName: case RadGrid.DeleteCommandName: case RadGrid.DeleteSelectedCommandName: case RadGrid.EditAllCommandName: case RadGrid.EditCommandName: case RadGrid.EditSelectedCommandName: case RadGrid.InitInsertCommandName: case RadGrid.PerformInsertCommandName: case RadGrid.UpdateCommandName: case RadGrid.UpdateEditedCommandName: // Filtering case RadGrid.ClearFilterCommandName: case RadGrid.FilterCommandName: case RadGrid.HeaderContextMenuFilterCommandName: // Paging case "ChangePageSize": case RadGrid.FirstPageCommandArgument: case RadGrid.LastPageCommandArgument: case RadGrid.NextPageCommandArgument: case RadGrid.PageCommandName: case RadGrid.PrevPageCommandArgument: // Sorting case RadGrid.ClearSortCommandName: case RadGrid.SortCommandName: // Misc. case RadGrid.ExpandCollapseCommandName: case RadGrid.RebindGridCommandName: return true; default: return false; //all others do not implicitly call rebind }}public static void SetSizesGridToEditMode(this RadGrid grid){ if (grid != null) { SizeEntity size; foreach (GridDataItem dataItem in grid.Items) { size = dataItem.DataItem as SizeEntity; if (size != null) dataItem.Edit = !size.IsReadOnly; //only set editable items to edit mode } grid.Rebind(); }}<telerik:TreeListButtonColumn UniqueName="DeleteColumn" ButtonType="ImageButton" CommandName="Delete" ToolTip="Delete this row" MinWidth="30px" MaxWidth="30px" HeaderStyle-Width="30px" Resizable="False" Reorderable="False" /><telerik:TreeListButtonColumn UniqueName="EditColumn" ButtonType="ImageButton" CommandName="Edit" ToolTip="Edit this row (Double Click)" MinWidth="40px" MaxWidth="40px" HeaderStyle-Width="40px" Resizable="False" Reorderable="False" />