I'm guessing that my problem is because of a limitation i found here client side binding specifics :"Data editing and grid editors. Since the control is bound on the client,
and no subsequent trips are made to the server, the default editors
cannot be rendered, and shown, which is the standard behavior, when the
grid is bound on the server." So I assume I'll need to add an
external edit form as suggested. Please let me know if that is the case,
or if I'm simply missing something below.
I have a radgrid with a number of gridtemplatecolumns, most of which contain radtextboxes, radnumerictextboxes and radcomboboxes that the user can edit at any time, without setting individual columns in edit mode. This all worked well using server side binding, but was slow (my customer needs to be able to add and save new rows in about 1 second or less, partial postbacks are taking ~4 seconds).
I am now attempting to get client side binding to work, and have hit a roadblock while trying to add a new row on the client side. I see that a new row is added below my other rows, but only the GridClientSelectColumn's checkbox on the leftmost column is displayed on the new row, all the template columns with textboxes and comboboxes are blank, not just empty controls, the controls aren't in the new column at all.
I call AddNewRow() to add a row, getValues() is a js function which supplies the default values for the new row, and InsertRowToDataSource() webservice returns a JSON string of the current grid data plus one new row with default values (e.g. [{id:"123", RoomName:"x"}, {id:"456", RoomName:"y"}] ) and finally, on rowdatabound, RadGrid1_RowDataBound(...) is called so i can set values on my template controls. However, my template controls appear to not exist on the new row.
and here is my radgrid (with some columns omitted):
I have a radgrid with a number of gridtemplatecolumns, most of which contain radtextboxes, radnumerictextboxes and radcomboboxes that the user can edit at any time, without setting individual columns in edit mode. This all worked well using server side binding, but was slow (my customer needs to be able to add and save new rows in about 1 second or less, partial postbacks are taking ~4 seconds).
I am now attempting to get client side binding to work, and have hit a roadblock while trying to add a new row on the client side. I see that a new row is added below my other rows, but only the GridClientSelectColumn's checkbox on the leftmost column is displayed on the new row, all the template columns with textboxes and comboboxes are blank, not just empty controls, the controls aren't in the new column at all.
I call AddNewRow() to add a row, getValues() is a js function which supplies the default values for the new row, and InsertRowToDataSource() webservice returns a JSON string of the current grid data plus one new row with default values (e.g. [{id:"123", RoomName:"x"}, {id:"456", RoomName:"y"}] ) and finally, on rowdatabound, RadGrid1_RowDataBound(...) is called so i can set values on my template controls. However, my template controls appear to not exist on the new row.
function AddNewRow() { wsLookup.InsertRowToDataSource(getValues(), updateGrid); return false; } function updateGrid(result) { var ds = eval(result); var tableView = $find("<%= RadGrid1.ClientID %>").get_masterTableView(); tableView.set_dataSource(ds); tableView.dataBind(); } function RadGrid1_RowDataBound(sender, args) { var room = args.get_item().findControl("rtbRoom"); // var room is null on the new row
room.set_value(args.get_dataItem()["RoomName"]); }and here is my radgrid (with some columns omitted):
<telerik:RadGrid ID="RadGrid1" runat="server" DataSourceID="SqlDataSourceAudit" EnableAJAX="True" EnableOutsideScripts="True" AutoGenerateColumns="False" GridLines="None" Width="100%" Height = "100%" PageSize="8" Skin="Office2007" ShowStatusBar="True" OnItemDataBound="RadGrid1_ItemDataBound" > <MasterTableView DataSourceID="SqlDataSourceAudit" CommandItemDisplay="Top" ClientDataKeyNames="AuditEntryID"> <CommandItemSettings ExportToPdfText="Export to Pdf" /> <RowIndicatorColumn FilterControlAltText="Filter RowIndicator column"> </RowIndicatorColumn> <ExpandCollapseColumn FilterControlAltText="Filter ExpandColumn column"> </ExpandCollapseColumn> <Columns> <telerik:GridClientSelectColumn Visible="true" HeaderStyle-Width="35px" UniqueName="ClientSelectColumn" HeaderText="Edit" ButtonType="ImageButton" Text="Edit" ImageUrl="~/images/16/pen_16.png" /> <telerik:GridTemplateColumn HeaderText="Sort" UniqueName="Sort" FilterControlAltText="Filter Sort column" Display = "false"> <ItemTemplate> <telerik:RadNumericTextBox ID="rnSort" runat="server" Width = "100%" DataType="System.Int32" MinValue="0"> <NumberFormat DecimalDigits="0" /> </telerik:RadNumericTextBox> </ItemTemplate> <HeaderStyle Width="40px" /> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn HeaderText="Building" UniqueName="Building" FilterControlAltText="Filter Building column"> <ItemTemplate> <telerik:RadComboBox ID="rcbBuilding" runat="server" AllowCustomText="True" Filter="Contains" Width="100%"> </telerik:RadComboBox> </ItemTemplate> <HeaderStyle Width="100px" /> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn HeaderText="Area" UniqueName="Area" FilterControlAltText="Filter Area column"> <ItemTemplate> <telerik:RadTextBox ID="rtbRoom" runat="server" Width="100%" ToolTip="The area or room in the building"> </telerik:RadTextBox> </ItemTemplate> <HeaderStyle Width="100px" /> </telerik:GridTemplateColumn> <telerik:GridButtonColumn ConfirmText="Delete this audit entry?" ConfirmDialogType="RadWindow" ConfirmTitle="Delete" ButtonType="ImageButton" CommandName="Delete" Text="Delete" UniqueName="DeleteColumn" ImageUrl="~/images/16/remove_16.png" FilterControlAltText="Filter DeleteColumn column"> <ItemStyle HorizontalAlign="Center"/> <HeaderStyle Width="25px" /> </telerik:GridButtonColumn> </Columns> <EditFormSettings> <EditColumn FilterControlAltText="Filter EditCommandColumn column"> </EditColumn> </EditFormSettings> <CommandItemTemplate> <table> <tr> <td align="left"> <asp:ImageButton ID="btnAdd" CommandName="Insert" Runat="server" ImageUrl = "~/images/16/add_16.png" tooltip="Add new audit line" ></asp:ImageButton> <asp:ImageButton ID="btnSave" CommandName="Save" Runat="server" ImageUrl = "~/images/16/ok_16.png" tooltip="Save all grid changes"></asp:ImageButton> </td> <td align="right"> <asp:ImageButton ID="btnRefresh" CommandName="Cancel" Runat="server" ImageUrl="~/images/16/refresh_16.png" tooltip="Refresh grid"></asp:ImageButton> </td> </tr> </table> </CommandItemTemplate> </MasterTableView> <FilterMenu EnableImageSprites="False"> </FilterMenu> <ClientSettings> <Selecting AllowRowSelect="True" /> <Scrolling AllowScroll="True" UseStaticHeaders="True" SaveScrollPosition="True"> </Scrolling> <Resizing AllowColumnResize="True" /> <ClientEvents OnRowSelected="RadGrid1_ItemSelected" OnCommand="RadGrid1_Command" OnRowDataBound="RadGrid1_RowDataBound" /> </ClientSettings> <PagerStyle Mode="Slider" /> <HeaderContextMenu CssClass="GridContextMenu GridContextMenu_Office2007"> </HeaderContextMenu> </telerik:RadGrid>