Hello,
I am trialing the radgrid controls and am having an issue with the batch update mode.
I have the following html in aspx:
This grid is populated on a selected row event from another grid:
Also, I am populating the combobox that is embedded in the radgrid on the ItemDataBound Event:
Finally, I am setting each row as editable in the PreRender event:
When the "Update All" button is clicked I am iterating through each row to determine if there are updates in the ItemCommand Event:
I have tried many differnt things here but the results from the ExtractValuesFromItem is always Count=0.
How can I determine if the row has actually changed? I don't want to update every row, only the items that have actually been changed.
Thanks,
​
I am trialing the radgrid controls and am having an issue with the batch update mode.
I have the following html in aspx:
<
telerik:RadGrid
ID
=
"RadGrid_MobileCheckList"
runat
=
"server"
AutoGenerateColumns
=
"False"
GridLines
=
"Vertical"
AllowMultiRowEdit
=
"true"
HeaderStyle-CssClass
=
"radGridHeaderStyle"
onitemdatabound
=
"RadGrid_MobileCheckList_ItemDataBound"
onprerender
=
"RadGrid_MobileCheckList_PreRender"
onitemcommand
=
"RadGrid_MobileCheckList_ItemCommand"
>
<
MasterTableView
DataKeyNames
=
"MobileChecklist_ID, MobileResponseType_ID, MobileResponse_ID"
EditMode
=
"Batch"
CommandItemDisplay
=
"Bottom"
>
<
Columns
>
<
telerik:GridBoundColumn
AllowSorting
=
"true"
HeaderStyle-Width
=
"20%"
ItemStyle-CssClass
=
"radGridItemStyle"
ReadOnly
=
"true"
DataField
=
"Task"
HeaderText
=
"Task"
></
telerik:GridBoundColumn
>
<
telerik:GridTemplateColumn
HeaderStyle-Width
=
"10%"
ItemStyle-CssClass
=
"radGridItemStyle"
HeaderText
=
"Response"
UniqueName
=
""
>
<
EditItemTemplate
>
<
telerik:RadComboBox
runat
=
"server"
ID
=
"MobileChecklistGrid_RadComboBox_Response"
ondatabound
=
"MobileChecklistGrid_RadComboBox_Response_DataBound"
Width
=
"100%"
DataTextField
=
"Response"
DataValueField
=
"MobileResponse_ID"
></
telerik:RadComboBox
>
</
EditItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderStyle-Width
=
"70%"
ItemStyle-CssClass
=
"radGridItemStyle"
HeaderText
=
"Comment"
>
<
EditItemTemplate
>
<
telerik:RadTextBox
runat
=
"server"
ID
=
"MobileChecklistGrid_TextBox_Comment"
Width
=
"100%"
Text='<%# Eval("Comment") %>'></
telerik:RadTextBox
>
</
EditItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridEditCommandColumn
UniqueName
=
"EditCommandColumn"
/>
</
Columns
>
<
CommandItemTemplate
>
<
asp:Button
runat
=
"server"
ID
=
"UpdateAll"
Text
=
"Update All"
CommandName
=
"UpdateAll"
/>
</
CommandItemTemplate
>
</
MasterTableView
>
</
telerik:RadGrid
>
This grid is populated on a selected row event from another grid:
protected
void
RadGrid_CheckList_ItemCommand(
object
sender, Telerik.Web.UI.GridCommandEventArgs e)
{
if
(e.CommandName ==
"RowClick"
)
{
GridDataItem item = (GridDataItem)e.Item;
string
checklistId = item[
"Checklist_ID"
].Text;
DataTable table = _domain.GetMobileCheckListDetailsByCheckListId(checklistId);
RadGrid_MobileCheckList.DataSource = table;
RadGrid_MobileCheckList.DataBind();
}
}
Also, I am populating the combobox that is embedded in the radgrid on the ItemDataBound Event:
protected
void
RadGrid_MobileCheckList_ItemDataBound(
object
sender, GridItemEventArgs e)
{
if
(e.Item
is
GridDataItem)
{
if
(e.Item
is
GridEditableItem && e.Item.IsInEditMode)
{
GridEditableItem item = (GridEditableItem)e.Item;
RadComboBox rcb = item.FindControl(
"MobileChecklistGrid_RadComboBox_Response"
)
as
RadComboBox;
if
(rcb !=
null
)
{
int
? responseTypeId = !
string
.IsNullOrEmpty(item.GetDataKeyValue(
"MobileResponseType_ID"
).ToString()) ?
int
.Parse(item.GetDataKeyValue(
"MobileResponseType_ID"
).ToString()) : (
int
?)
null
;
if
(responseTypeId !=
null
)
{
DataTable table = _domain.GetMobileResponsesByResponseTypeID(responseTypeId);
comboBox.DataSource = table;
comboBox.DataValueField = table.Columns[valueField].ToString();
comboBox.DataTextField = table.Columns[textField].ToString();
comboBox.DataBind();
comboBox.SelectedIndex = -1;
}
}
}
}
}
Finally, I am setting each row as editable in the PreRender event:
protected
void
RadGrid_MobileCheckList_PreRender(
object
sender, EventArgs e)
{
foreach
(GridDataItem dataItem
in
RadGrid_MobileCheckList.Items)
{
dataItem.Edit =
true
;
}
RadGrid_MobileCheckList.Rebind();
}
When the "Update All" button is clicked I am iterating through each row to determine if there are updates in the ItemCommand Event:
I have tried many differnt things here but the results from the ExtractValuesFromItem is always Count=0.
protected
void
RadGrid_MobileCheckList_ItemCommand(
object
sender, GridCommandEventArgs e)
{
if
(e.CommandName ==
"UpdateAll"
)
{
foreach
(GridEditableItem editedItem
in
RadGrid_MobileCheckList.EditItems)
{
Hashtable newValues =
new
Hashtable();
Hashtable oldValues =
new
Hashtable();
oldValues = (Hashtable)editedItem.SavedOldValues;
e.Item.OwnerTableView.ExtractValuesFromItem(newValues, editedItem);
editedItem.ExtractValues(newValues);
//I can get the items with something like this:
//But I dont want to update every row everytime, I need to know which items have been actually edited. Something like an isDirty property.
var test = ((RadComboBox)editedItem.Cells[3].Controls[1]).SelectedItem;
var test2 = ((RadTextBox)editedItem.Cells[4].Controls[1]).Text;
}
}
}
How can I determine if the row has actually changed? I don't want to update every row, only the items that have actually been changed.
Thanks,
​