<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<
script
runat
=
"server"
>
protected void RadGrid_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
DataTable dt = new DataTable();
DataRow dr;
int colsNum = 4;
int rowsNum = 5;
string colName = "Column";
for (int j = 1; j <= colsNum; j++)
{
dt.Columns.Add(String.Format("{0}{1}", colName, j));
}
for (int i = 1; i <= rowsNum; i++)
{
dr = dt.NewRow();
for (int k = 1; k <= colsNum; k++)
{
dr[String.Format("{0}{1}", colName, k)] = String.Format("{0}{1} Row{2}", colName, k, i);
}
dt.Rows.Add(dr);
}
(sender as RadGrid).DataSource = dt;
}
</
script
>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
<
head
id
=
"Head1"
runat
=
"server"
>
<
meta
http-equiv
=
"content-type"
content
=
"text/html;charset=utf-8"
/>
<
title
>RadControls</
title
>
</
head
>
<
body
>
<
form
id
=
"form1"
runat
=
"server"
>
<
asp:ScriptManager
ID
=
"ScriptManager1"
runat
=
"server"
/>
<
telerik:RadAjaxLoadingPanel
ID
=
"RadAjaxLoadingPanel1"
runat
=
"server"
Transparency
=
"50"
BackColor
=
"Yellow"
/>
<
telerik:RadAjaxManager
ID
=
"RadAjaxManager1"
runat
=
"server"
DefaultLoadingPanelID
=
"RadAjaxLoadingPanel1"
>
<
AjaxSettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"RadGrid1"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"RadGrid1"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
AjaxSettings
>
</
telerik:RadAjaxManager
>
<
telerik:RadGrid
ID
=
"RadGrid1"
runat
=
"server"
AutoGenerateEditColumn
=
"true"
OnNeedDataSource
=
"RadGrid_NeedDataSource"
>
<
MasterTableView
EditMode
=
"EditForms"
>
<
EditFormSettings
EditFormType
=
"Template"
/>
<
EditFormSettings
>
<
FormTemplate
>
<
telerik:RadScriptBlock
ID
=
"RadScriptBlock1"
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
//Calculate the original pages * the copies and input the result to copy quantity
var ActualIndex;
var index;
var txtRadOriginalPages = null;
var txtRadCopies = null;
var txtRadCopyQty1 = null;
function updateTotals(sender, args) {
var v1 = txtOriginalPages.get_value();
var v2 = txtCopies.get_value();
var finalValue = parseFloat(v1) + parseFloat(v2);
txtRadCopyQty1.set_value(parseFloat(finalValue));
}
function setIndex(sender, args) {
index = args.get_itemIndexHierarchical();
}
function setActualIndex() {
ActualIndex = index;
}
function Load1(sender, args) {
txtOriginalPages = sender;
}
function Load2(sender, args) {
txtCopies = sender;
}
function Load3(sender, args) {
txtRadCopyQty1 = sender;
}
</
script
>
</
telerik:RadScriptBlock
>
<
table
>
<
tr
>
<
td
align
=
"left"
>
<
asp:Label
ID
=
"lblOriginalPages"
runat
=
"server"
Text
=
"Original Pages:"
></
asp:Label
>
</
td
>
<
td
align
=
"left"
>
<
telerik:RadNumericTextBox
ID
=
"txtRadOriginalPages"
runat
=
"server"
NumberFormat-DecimalDigits
=
"2"
NumberFormat-DecimalSeparator
=
"."
NumberFormat-GroupSeparator
=
","
NumberFormat-GroupSizes
=
"3"
NumberFormat-AllowRounding
=
"true"
Type
=
"Number"
>
<
ClientEvents
OnValueChanged
=
"updateTotals"
OnFocus
=
"setActualIndex"
OnLoad
=
"Load1"
/>
</
telerik:RadNumericTextBox
>
</
td
>
<
td
align
=
"left"
>
<
asp:Label
ID
=
"lblCopies"
runat
=
"server"
Text
=
"Copies:"
></
asp:Label
>
</
td
>
<
td
align
=
"left"
>
<
telerik:RadNumericTextBox
ID
=
"txtRadCopies"
runat
=
"server"
NumberFormat-DecimalDigits
=
"2"
NumberFormat-DecimalSeparator
=
"."
NumberFormat-GroupSeparator
=
","
NumberFormat-GroupSizes
=
"3"
NumberFormat-AllowRounding
=
"true"
Type
=
"Number"
>
<
ClientEvents
OnValueChanged
=
"updateTotals"
OnFocus
=
"setActualIndex"
OnLoad
=
"Load2"
/>
</
telerik:RadNumericTextBox
>
</
td
>
</
tr
>
<
tr
>
<
td
align
=
"left"
>
<
asp:Label
ID
=
"lblCopyQty1"
runat
=
"server"
Text
=
"Original Pages + Copy:"
></
asp:Label
>
</
td
>
<
td
align
=
"left"
>
<
telerik:RadNumericTextBox
ID
=
"txtRadCopyQty1"
runat
=
"server"
NumberFormat-DecimalDigits
=
"2"
NumberFormat-DecimalSeparator
=
"."
NumberFormat-GroupSeparator
=
","
NumberFormat-GroupSizes
=
"3"
NumberFormat-AllowRounding
=
"true"
Type
=
"Number"
>
<
ClientEvents
OnLoad
=
"Load3"
/>
</
telerik:RadNumericTextBox
>
</
td
>
<
td
align
=
"left"
>
<
asp:Label
ID
=
"lblInkType1"
runat
=
"server"
Text
=
"Ink Type 1:"
></
asp:Label
>
</
td
>
</
tr
>
<
tr
>
<
td
align
=
"right"
colspan
=
"6"
>
<
asp:ImageButton
ID
=
"ImageButtonDemoMainUpdateInsert"
ToolTip='<%# (Container is GridEditFormInsertItem) ? "Insert" : "Update" %>'
CommandName='<%# (Container is GridEditFormInsertItem) ? "PerformInsert" : "Update" %>'
runat="server" ImageUrl="~/Images/GridUpdateEditInsert.gif" />
<
asp:ImageButton
ID
=
"ImageButtonDemoMainCancelUpdateInsert"
ToolTip
=
"Cancel"
CommandName
=
"Cancel"
CausesValidation
=
"false"
runat
=
"server"
ImageUrl
=
"~/Images/GridCancelEditInsert.gif"
/>
</
td
>
</
tr
>
</
table
>
</
FormTemplate
>
</
EditFormSettings
>
</
MasterTableView
>
</
telerik:RadGrid
>
</
form
>
</
body
>
</
html
>
<
ClientSettings
AllowKeyboardNavigation
=
"true"
EnablePostBackOnRowClick
=
"true"
>
<
Selecting
AllowRowSelect
=
"true"
></
Selecting
>
</
ClientSettings
>
<
asp:LinqDataSource
ID
=
"StellenLinqDS"
runat
=
"server"
ContextTypeName
=
"MySolution.DataObjects"
EntityTypeName
=
""
OrderBy
=
"LetzteAktivitaet desc"
Select
=
"new (Name, Unternehmen, ID, Status, Anzahl, AnzahlPlaetze, LetzteAktivitaet)"
TableName
=
"StellenDaten"
Where
=
"Status != @Status"
>
<
WhereParameters
>
<
asp:Parameter
DefaultValue
=
"Archiv"
Name
=
"Status"
Type
=
"String"
/>
</
WhereParameters
>
</
asp:LinqDataSource
>
I'm having a little difficulty with updating a hierarchical grid. My gird has 3 levels, orders,deliveries and schedules. On my top level, I want to be able to directly update the grid row on a few of the columns. I have a sample program where I do the same thing on a normal grid and it works. Identical code in my Hierarchical grid does not. The problem I'm having is when it come time for me to assign the grid item it's new value. For some reason, my grid item is being determined as read-only upon assignment and is failing. I've confirmed that the item is not read-only, but when I try to update it, it's being rendered as read-only and I don't know why. My update routine is as follows. Any help with this would be appreciated. Thanks.
protected void RadGrid1_UpdateCommand(object source, Telerik.Web.UI.GridCommandEventArgs e)
{
foreach (GridColumn column in e.Item.OwnerTableView.RenderColumns)
{
if (column is IGridEditableColumn)
{
IGridEditableColumn editableCol = (column as IGridEditableColumn);
if (editableCol.IsEditable)
{
GridEditableItem editedItem = e.Item as GridEditableItem;
object oldval = editedItem.SavedOldValues[column.UniqueName];
GridEditManager editMan = editedItem.EditManager;
IGridColumnEditor editor = editMan.GetColumnEditor(editableCol);
object editorValue = null;
editorValue = (editor as GridTextColumnEditor).Text;
try
{
DataRow[] changedRows = this.ItemSource.Select("ORDER = '" + editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex] ["ORDER"].ToString() + "'");
changedRows[0][column.UniqueName] = editorValue; // This is the line where the error is occurring !!!
ItemSource.AcceptChanges();
}
catch (Exception ex)
{
Label1.Text = "<strong>Unable to set value of column '" + column.UniqueName + "'</strong> - " + ex.Message;
e.Canceled = true;
break;
}
}
}
}
}
<%@ Page Language="VB" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="RadControlsWebApp1._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
<
head
runat
=
"server"
>
<
title
></
title
>
<
telerik:RadStyleSheetManager
id
=
"RadStyleSheetManager1"
runat
=
"server"
/>
</
head
>
<
body
>
<
form
id
=
"form1"
runat
=
"server"
>
<
telerik:RadScriptManager
ID
=
"RadScriptManager1"
runat
=
"server"
>
<
scripts
>
<%--Needed for JavaScript IntelliSense in VS2010--%>
<%--For VS2008 replace RadScriptManager with ScriptManager--%>
<
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.
</
script
>
<
telerik:RadAjaxManager
ID
=
"RadAjaxManager1"
runat
=
"server"
>
</
telerik:RadAjaxManager
>
<
telerik:RadComboBox
runat
=
"server"
ID
=
"RadComboBoxProduct"
TabIndex
=
"13"
Width
=
"100%"
HighlightTemplatedItems
=
"true"
EnableEmbeddedSkins
=
"true"
>
<
headertemplate
>
<
ul
>
<
li
class
=
"col1"
>Product </
li
>
<
li
class
=
"col2"
>Product Status </
li
>
</
ul
>
</
headertemplate
>
<
itemtemplate
>
<
ul
>
<
li
class
=
"col1"
>
<
asp:Label
runat
=
"server"
ID
=
"RadComboBoxItemProduct"
></
asp:Label
>
</
li
>
<
li
class
=
"col2"
>
<
asp:Label
runat
=
"server"
ID
=
"RadComboBoxItemProductStatus"
></
asp:Label
>
</
li
>
</
ul
>
</
itemtemplate
>
</
telerik:RadComboBox
>
</
form
>
</
body
>
</
html
>
Private Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Dim datatable As New DataTable()
datatable.Columns.Add("ProductName")
datatable.Columns.Add("CodeName")
datatable.Columns.Add("FirmProductNo")
datatable.Rows.Add("11396", "ddddd", "Inhouse")
datatable.Rows.Add("23742", "ereeee", "Died")
datatable.Rows.Add("2302", "oewjhf", "Dead")
datatable.Rows.Add("0928", "ddddd", "Cutted")
RadComboBoxProduct.DataSource = datatable
RadComboBoxProduct.DataBind()
End Sub
Protected Sub RadComboBoxProduct_ItemDataBound(sender As Object, e As Telerik.Web.UI.RadComboBoxItemEventArgs) Handles RadComboBoxProduct.ItemDataBound
Dim labelProduct = DirectCast(RadComboBoxProduct.Items(e.Item.Index).FindControl("RadComboBoxItemProduct"), Label)
Dim labelProductStatus = DirectCast(RadComboBoxProduct.Items(e.Item.Index).FindControl("RadComboBoxItemProductStatus"), Label)
labelProduct.Text = e.Item.DataItem("ProductName")
labelProductStatus.Text = e.Item.DataItem("CodeName")
e.Item.Value = e.Item.DataItem("FirmProductNo")
End Sub
<
Telerik:GridTemplateColumn
DataType
=
"System.Int32"
HeaderText
=
"Impression Papier"
UniqueName
=
"NbPapier"
>
<
ItemTemplate
>
<
asp:CheckBox
ID
=
"ChkBoxNb"
runat
=
"server"
AutoPostBack
=
"false"
OnCheckedChanged
=
"ToggleRadNumericState"
/>
<
Telerik:RadNumericTextBox
ID
=
"RadNumericTextBoxNb"
runat
=
"server"
AllowOutOfRangeAutoCorrect
=
"true"
AutoPostBack
=
"false"
DataType
=
"System.Int32"
Enabled
=
"true"
MinValue
=
"0"
NumberFormat-AllowRounding
=
"false"
NumberFormat-DecimalDigits
=
"0"
ShowSpinButtons
=
"true"
Type
=
"Number"
ValidationGroup
=
"MyValidationGroup"
MaxLength
=
"3"
Value
=
"0"
/>
</
ItemTemplate
>
</
Telerik:GridTemplateColumn
>
protected
void
ToggleRadNumericState(
object
sender, EventArgs e)
{
(((sender
as
CheckBox).NamingContainer
as
GridItem).FindControl(
"RadNumericTextBoxNb"
)
as
RadNumericTextBox).Enabled = (sender
as
CheckBox).Checked;
}