That's definitely cleaner than my code! Thanks for the example. I modified it a bit to mimic mine (and copy-pasted below since I can't attach a zip file) to show 3 problems...
1) If you click on the bottom row it works, but if you click on the new bottom row, it doesn't create another row, but it should.
2) The checkbox shows "true" rather than a checkbox. (That's part of why I used innerHMTL in my earlier post, but there must be a better solution.)
3) We also need it to populate with 2 blank rows if there's no data. So on the server-side, if you comment out the code that populates the dataset, my gridCreated code will execute the IF block. It creates 2 rows, but doesn't give default values. (I could create the 2 blank rows server-side, but that would require maintaining 2 places of default values -- on the grid and in code. But if that's the only way, then so be it.)
Thanks for your help, and look forward to your answers.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="RadGridEditBatchLastRowLogic.aspx.cs" Inherits="RadGridEditBatchLastRowLogic" %>
<!DOCTYPE html>
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
<
head
runat
=
"server"
>
<
title
></
title
>
</
head
>
<
body
>
<
form
id
=
"form1"
runat
=
"server"
>
<
telerik:RadScriptManager
ID
=
"RadScriptManager1"
runat
=
"server"
>
<
Scripts
>
<
asp:ScriptReference
Assembly
=
"Telerik.Web.UI"
Name
=
"Telerik.Web.UI.Common.Core.js"
/>
<
asp:ScriptReference
Assembly
=
"Telerik.Web.UI"
Name
=
"Telerik.Web.UI.Common.jQuery.js"
/>
<
asp:ScriptReference
Assembly
=
"Telerik.Web.UI"
Name
=
"Telerik.Web.UI.Common.jQueryInclude.js"
/>
</
Scripts
>
</
telerik:RadScriptManager
>
<
script
type
=
"text/javascript"
>
//Put your JavaScript code here.
function gridCreated(sender, args) {
var masterTable = sender.get_masterTableView();
var rows = masterTable.get_dataItems();
if (rows.length == 0) {
var batMan = sender.get_batchEditingManager();
batMan.addNewRecord(masterTable);
batMan.addNewRecord(masterTable);
}
}
function batchEditOpened(sender, args) {
var batMan = sender.get_batchEditingManager();
var tableView = args.get_tableView();
var items = tableView.get_dataItems();
var item = args.get_row().control;
if (items.length == (item.get_itemIndex() + 1)) {
setTimeout(function () {
batMan.addNewRecord(tableView);
batMan.openCellForEdit(args.get_cell());
}, 10);
}
}
</
script
>
<
telerik:RadAjaxManager
ID
=
"RadAjaxManager1"
runat
=
"server"
>
</
telerik:RadAjaxManager
>
<
telerik:RadGrid
ID
=
"RadGrid1"
runat
=
"server"
AllowPaging
=
"False"
CellSpacing
=
"0"
GridLines
=
"None"
Width
=
"800px"
OnNeedDataSource
=
"RadGrid1_NeedDataSource"
>
<
ClientSettings AllowKeyboardNavigation="true"
>
<
ClientEvents
OnBatchEditOpened
=
"batchEditOpened"
OnGridCreated
=
"gridCreated"
/>
</
ClientSettings
>
<
MasterTableView
AutoGenerateColumns
=
"False"
DataKeyNames
=
"PurchaseOrderDetailKey"
EditMode
=
"Batch"
InsertItemDisplay
=
"Bottom"
CommandItemDisplay
=
"Top"
>
<
BatchEditingSettings
EditType
=
"Cell"
OpenEditingEvent
=
"Click"
/>
<
Columns
>
<
telerik:GridNumericColumn
DataField
=
"PurchaseOrderDetailKey"
HeaderText
=
"PurchaseOrderDetailKey"
UniqueName
=
"PurchaseOrderDetailKey"
DataType
=
"System.Int32"
Visible
=
"False"
ReadOnly
=
"True"
>
</
telerik:GridNumericColumn
>
<
telerik:GridTemplateColumn
DataField
=
"PostToGeneralLedger"
HeaderText
=
"Post"
UniqueName
=
"PostToGeneralLedger"
DataType
=
"System.Boolean"
DefaultInsertValue
=
"true"
>
<
HeaderStyle
Width
=
"40px"
/>
<
ItemStyle
Width
=
"40px"
/>
<
ItemTemplate
>
<
input
id
=
"chkPost"
type
=
"checkbox"
checked='<%# Eval("PostToGeneralLedger") %>' onclick="changeEditor(this);" />
</
ItemTemplate
>
<
EditItemTemplate
>
<
asp:CheckBox
ID
=
"chkPost"
runat
=
"server"
Checked='<%# Bind("PostToGeneralLedger") %>' />
</
EditItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
DataField
=
"UnitPrice"
HeaderText
=
"UnitPrice"
UniqueName
=
"UnitPrice"
DataType
=
"System.Double"
DefaultInsertValue
=
"0"
>
<
ItemTemplate
>
<
asp:Label
ID
=
"lblUnitPrice"
runat
=
"server"
Text='<%# Eval("UnitPrice") %>'>
</
asp:Label
>
</
ItemTemplate
>
<
EditItemTemplate
>
<
telerik:RadNumericTextBox
ID
=
"txtUnitPrice"
runat
=
"server"
DataType
=
"System.Decimal"
MaxLength
=
"23"
Width
=
"100%"
IncrementSettings-InterceptArrowKeys
=
"false"
Culture
=
"English (United States)"
DbValue='<%# Bind("UnitPrice") %>' Type="Number" NumberFormat-DecimalDigits="4" />
</
EditItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
DataField
=
"UnitDescription"
UniqueName
=
"UnitDescription"
HeaderText
=
"Unit Desc"
DataType
=
"System.String"
DefaultInsertValue
=
"my default"
>
<
ItemTemplate
>
<
asp:Label
ID
=
"lblUnitDescription"
runat
=
"server"
Text='<%# Eval("UnitDescription") %>'>
</
asp:Label
>
</
ItemTemplate
>
<
EditItemTemplate
>
<
telerik:RadTextBox
ID
=
"txtUnitDescription"
runat
=
"server"
MaxLength
=
"10"
Width
=
"100%"
Text='<%# Bind("UnitDescription") %>' >
</
telerik:RadTextBox
>
</
EditItemTemplate
>
</
telerik:GridTemplateColumn
>
</
Columns
>
</
MasterTableView
>
</
telerik:RadGrid
>
</
form
>
</
body
>
</
html
>
using
System;
using
System.Collections.Generic;
using
System.Data;
using
System.Linq;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
Telerik.Web.UI;
public
partial
class
RadGridEditBatchLastRowLogic : System.Web.UI.Page
{
protected
void
Page_Load(
object
sender, EventArgs e)
{
}
protected
void
RadGrid1_NeedDataSource(
object
sender, GridNeedDataSourceEventArgs e)
{
RadGrid1.DataSource = GetGridSource();
}
private
DataTable GetGridSource()
{
DataTable dataTable =
new
DataTable();
DataColumn column =
new
DataColumn();
column.DataType = Type.GetType(
"System.Int32"
);
column.ColumnName =
"PurchaseOrderDetailKey"
;
dataTable.Columns.Add(column);
column =
new
DataColumn();
column.DataType = Type.GetType(
"System.Boolean"
);
column.ColumnName =
"PostToGeneralLedger"
;
dataTable.Columns.Add(column);
column =
new
DataColumn();
column.DataType = Type.GetType(
"System.Decimal"
);
column.ColumnName =
"UnitPrice"
;
dataTable.Columns.Add(column);
column =
new
DataColumn();
column.DataType = Type.GetType(
"System.String"
);
column.ColumnName =
"UnitDescription"
;
dataTable.Columns.Add(column);
DataColumn[] PrimaryKeyColumns =
new
DataColumn[1];
PrimaryKeyColumns[0] = dataTable.Columns[
"PurchaseOrderDetailKey"
];
dataTable.PrimaryKey = PrimaryKeyColumns;
for
(
int
i = 0; i <= 5; i++)
{
DataRow row = dataTable.NewRow();
row[
"PurchaseOrderDetailKey"
] = i + 1;
row[
"PostToGeneralLedger"
] =
true
;
row[
"UnitPrice"
] = (i + 1) + (i + 1) * 0.1 + (i + 1) * 0.01;
row[
"UnitDescription"
] =
"Name "
+ (i + 1);
dataTable.Rows.Add(row);
}
return
dataTable;
}
}