I am working on a grid that puts all the rows (about 8 usually) into edit mode for batch updates.
I have a command button in the command header of the grid to save all the data.
I was trying to use the ExtractValuesFromItem and SavedOldValues collections to perform the update and neither collection has any data. All the entries are there but are all NULL. I don't understand why. I have used this method before in a slightly different situation.
The one thing I can see that is different is in the current grid that this isn't working for I have defined an ItemTemplate and an EditItemTemplate. I am using InPlace edit mode.
I have found that I can get the current values by using editedItem.FindControl("...")... but this is a little more work and it doesn't give me the previous values either.
Should I be able to use the ExtractValues and SavedOldvalues methods in this instance or is there some reason why it cannot be used? If it should be working - any thought on why both collections are coming up with nulls for everying?
The codebehind for updates:
The markup:
I have a command button in the command header of the grid to save all the data.
I was trying to use the ExtractValuesFromItem and SavedOldValues collections to perform the update and neither collection has any data. All the entries are there but are all NULL. I don't understand why. I have used this method before in a slightly different situation.
The one thing I can see that is different is in the current grid that this isn't working for I have defined an ItemTemplate and an EditItemTemplate. I am using InPlace edit mode.
I have found that I can get the current values by using editedItem.FindControl("...")... but this is a little more work and it doesn't give me the previous values either.
Should I be able to use the ExtractValues and SavedOldvalues methods in this instance or is there some reason why it cannot be used? If it should be working - any thought on why both collections are coming up with nulls for everying?
The codebehind for updates:
protected void UpdateAll_Clicked(object sender, EventArgs e)
{
try
{
WeatherForecast w = new WeatherForecast();
WeatherForecast orig_w = new WeatherForecast();
foreach (GridDataItem item in RadGrid1.EditItems)
{
GridEditableItem editedItem = (item.OwnerTableView.EditMode == GridEditMode.InPlace) ? item : (GridEditableItem)item.EditFormItem;
Hashtable newValues = new Hashtable();
//The GridTableView will fill the values from all editable columns in the hash
RadGrid1.MasterTableView.ExtractValuesFromItem(newValues, editedItem);
newValues["Temp"] = (editedItem.FindControl("txtTemp") as TextBox).Text;
newValues["Temp2"] = (editedItem.FindControl("txtTemp2") as TextBox).Text;
newValues["ShortText"] = (editedItem.FindControl("txtShortText") as TextBox).Text;
newValues["Pop"] = (editedItem.FindControl("txtPop") as TextBox).Text;
newValues["Manual"] = (editedItem.FindControl("radioManualEdit") as RadioButton).Checked;
newValues["ConditionId"] = (editedItem.FindControl("listWeather") as RadComboBox).SelectedItem.Value;
newValues["UvIndex"] = (editedItem.FindControl("listUvIndex") as DropDownList).SelectedItem.Value;
w.Id = Convert.ToInt32(editedItem.GetDataKeyValue("Id"));
w.Temp = Convert.ToInt32(newValues["Temp"]);
w.Temp2 = Convert.ToInt32(newValues["Temp2"]);
w.ConditionId = Convert.ToInt32(newValues["ConditionId"]);
w.ShortText = Convert.ToString(newValues["ShortText"]);
if (string.IsNullOrEmpty(Convert.ToString(newValues["Pop"])))
{
w.Pop = null;
}
else
{
w.Pop = Convert.ToInt32(newValues["Pop"]);
}
w.Manual = Convert.ToBoolean(newValues["Manual"]);
w.UvIndex = Convert.ToInt32(newValues["UvIndex"]);
w.UvText = WeatherForecast.GetUvText(w.UvIndex);
// TODO: implement day of week editing
// w.DayOfWeek = Convert.ToString(newValues["DayOfWeek"]);
orig_w.Id = w.Id;
orig_w.Temp = Convert.ToInt32(editedItem.SavedOldValues["Temp"]);
orig_w.Temp2 = Convert.ToInt32(editedItem.SavedOldValues["Temp2"]);
orig_w.ConditionId = Convert.ToInt32(editedItem.SavedOldValues["ConditionId"]);
orig_w.ShortText = Convert.ToString(editedItem.SavedOldValues["ShortText"]);
if (string.IsNullOrEmpty(Convert.ToString(editedItem.SavedOldValues["Pop"])))
{
orig_w.Pop = null;
}
else
{
orig_w.Pop = Convert.ToInt32(editedItem.SavedOldValues["Pop"]);
}
orig_w.Manual = Convert.ToBoolean(editedItem.SavedOldValues["Manual"]);
orig_w.UvIndex = Convert.ToInt32(editedItem.SavedOldValues["UvIndex"]);
orig_w.UvText = WeatherForecast.GetUvText(orig_w.UvIndex);
// wDAO.UpdateWeather(w, orig_w);
editedItem.Edit = false;
}
}
catch (Exception ex)
{
Common.FlowFunctions.ShowErrorMessage(RadAjaxManager1, "Error updating weather: " + ex.Message, true);
}
setSelection = true;
RadGridCity.Rebind();
RadGrid1.Rebind();
}
The markup:
<
telerik:RadGrid
ID
=
"RadGrid1"
runat
=
"server"
CellSpacing
=
"0"
GridLines
=
"None"
AllowSorting
=
"false"
AutoGenerateColumns
=
"False"
AllowPaging
=
"true"
PageSize
=
"20"
AllowAutomaticDeletes
=
"false"
AllowAutomaticUpdates
=
"false"
OnPreRender
=
"RadGrid1_PreRender"
OnSortCommand
=
"RadGrid1_SortCommand"
OnNeedDataSource
=
"RadGrid1_NeedDataSource"
OnItemCommand
=
"RadGrid1_ItemCommand"
OnItemDataBound
=
"RadGrid1_ItemDataBound"
>
<
ClientSettings
>
<
ClientEvents
OnKeyPress
=
"keyPressedStopEnter"
/>
</
ClientSettings
>
<
PagerStyle
AlwaysVisible
=
"false"
/>
<
ItemStyle
CssClass
=
"report_col_B"
/>
<
AlternatingItemStyle
CssClass
=
"report_col_A"
/>
<
MasterTableView
DataKeyNames
=
"Id"
EditMode
=
"InPlace"
TableLayout
=
"Fixed"
CommandItemDisplay
=
"Top"
>
<
Columns
>
<
telerik:GridCheckBoxColumn
DataField
=
"Manual"
DataType
=
"System.Boolean"
HeaderText
=
"Source"
SortExpression
=
"Manual"
UniqueName
=
"Manual"
Display
=
"false"
>
</
telerik:GridCheckBoxColumn
>
<
telerik:GridBoundColumn
DataField
=
"LocationCode"
UniqueName
=
"LocationCode"
HeaderText
=
"Location Code"
Visible
=
"false"
></
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"LocationName"
DataType
=
"System.String"
UniqueName
=
"LocationName"
Visible
=
"false"
HeaderText
=
"Location"
></
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"ConditionId"
UniqueName
=
"ConditionId"
HeaderText
=
"Icon"
AllowSorting
=
"false"
Visible
=
"false"
></
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"TempLabel"
UniqueName
=
"TempLabel"
Visible
=
"false"
AllowSorting
=
"false"
></
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"Temp2Label"
UniqueName
=
"Temp2Label"
Visible
=
"false"
AllowSorting
=
"false"
></
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"Temp"
UniqueName
=
"Temp"
HeaderText
=
"Temp"
AllowSorting
=
"false"
Visible
=
"false"
HeaderTooltip
=
"The high for daily forecasts."
></
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"Temp2"
UniqueName
=
"Temp2"
HeaderText
=
"Temp 2"
AllowSorting
=
"false"
Visible
=
"false"
HeaderTooltip
=
"The low for daily forecasts and 'Feels Like' for current and hourly."
></
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"ShortText"
UniqueName
=
"ShortText"
HeaderText
=
"Short Text"
Visible
=
"false"
AllowSorting
=
"false"
></
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"Pop"
UniqueName
=
"Pop"
HeaderText
=
"P.O.P."
AllowSorting
=
"false"
Visible
=
"false"
HeaderTooltip
=
"Probability of Precipitation"
></
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"UvIndex"
UniqueName
=
"UvIndex"
HeaderText
=
"UV Index"
Visible
=
"false"
AllowSorting
=
"false"
></
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"UvText"
UniqueName
=
"UvText"
HeaderText
=
"UV Text"
Visible
=
"false"
AllowSorting
=
"false"
></
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"ModifiedDate"
UniqueName
=
"ModifiedDate"
HeaderText
=
"Last Updated"
SortExpression
=
"ModifiedDate"
ReadOnly
=
"true"
>
<
ItemStyle
CssClass
=
"smc_form"
/>
</
telerik:GridBoundColumn
>
</
Columns
>
<
ItemTemplate
>
<
table
cellpadding
=
"0"
cellspacing
=
"0"
>
<
col
width
=
"140px"
/>
<
col
width
=
"30px"
/>
<
col
width
=
"190px"
/>
<
col
width
=
"80px"
/>
<
col
width
=
"80px"
/>
<
col
width
=
"50px"
/>
<
col
width
=
"120px"
/>
<
col
width
=
"80px"
/>
<
col
width
=
"80px"
/>
<
tr
>
<
td
rowspan
=
"2"
>
<
h2
><%# ForecastDayDisplay(Eval("ForecastName"), Eval("DayOfWeek"))%></
h2
>
<%#Eval("ModifiedDate", "{0:g}")%>
</
td
>
<
td
rowspan
=
"2"
><
asp:ImageButton
ID
=
"ManualToggleButton"
Height
=
"24px"
runat
=
"server"
CausesValidation
=
"false"
/></
td
>
<
td
rowspan
=
"2"
><%# Eval("ConditionText")%></
td
>
<
td
align
=
"right"
><%# Eval("TempLabel")%></
td
>
<
td
><%# Eval("Temp")%> <
span
class
=
"smc_bodybold"
>°C</
span
></
td
>
<
td
>Text:</
td
>
<
td
><%# Eval("ShortText")%></
td
>
<
td
align
=
"right"
>UV Index:</
td
>
<
td
><%# NullIntDisplay(Eval("UvIndex"), "")%></
td
>
</
tr
>
<
tr
>
<
td
align
=
"right"
><%# Eval("Temp2Label")%></
td
>
<
td
><%# Eval("Temp2")%> <
span
class
=
"smc_bodybold"
>°C</
span
></
td
>
<
td
><
span
title
=
"Probability of precipitation"
style
=
"cursor: help"
>P.O.P.:</
span
></
td
>
<
td
><%# NullIntDisplay(Eval("Pop"), "%")%></
td
>
<
td
align
=
"right"
>UV Text::</
td
>
<
td
><%# Eval("UvText")%></
td
>
</
tr
>
</
table
>
</
ItemTemplate
>
<
CommandItemSettings
ShowAddNewRecordButton
=
"false"
ShowRefreshButton
=
"false"
/>
<
CommandItemTemplate
>
<
table
>
<
tr
>
<
td
style
=
"font-size: 13px; padding: 10px 10px; text-align: left; white-space: nowrap; font-weight: bold"
>
<
asp:Label
ID
=
"labelCityName"
runat
=
"server"
Text
=
"Select"
></
asp:Label
>
<
br
/> City Weather Details
</
td
>
<
td
><
br
/>
<
asp:Button
ID
=
"btnUpdateAll"
CssClass
=
"smc_form"
runat
=
"server"
Text="Save Now >" CommandName="UpdateAll"
Visible="true" OnClick="UpdateAll_Clicked" />
</
td
>
<
td
style
=
"width: 50px;"
> </
td
>
<
td
style
=
"font-size: 11px; padding: 10px 10px; text-align: left; white-space: nowrap; font-weight: bold"
>
<
asp:Panel
ID
=
"panelDataSources"
runat
=
"server"
>
<
asp:Label
runat
=
"server"
ID
=
"Label1"
Text
=
"Data Source:"
></
asp:Label
>
<
br
/>
<
asp:ImageButton
Height
=
"32"
ID
=
"btnAllManual"
CommandName
=
"SetAllAutoOff"
ImageUrl
=
"~/images/icons/auto_off.png"
runat
=
"server"
ToolTip
=
"Set all forecasts to Manual"
AlternateText
=
"All Manual"
OnClientClick
=
"return confirm('Are you sure you want to set all forecasts to Manual?');"
/>
<
asp:ImageButton
Height
=
"32"
ID
=
"btnAllAutomated"
CommandName
=
"SetAllAutoOn"
ImageUrl
=
"~/images/icons/auto_on.png"
runat
=
"server"
ToolTip
=
"Set all forecasts to Data Feed"
AlternateText
=
"All Auto"
OnClientClick
=
"return confirm('Are you sure you want to set all forecasts to Data Feed?');"
/>
</
asp:Panel
>
</
td
>
</
tr
>
</
table
>
</
CommandItemTemplate
>
<
EditItemTemplate
>
<
table
cellpadding
=
"0"
cellspacing
=
"0"
>
<
col
width
=
"140px"
/>
<
col
width
=
"100px"
/>
<
col
width
=
"190px"
/>
<
col
width
=
"80px"
/>
<
col
width
=
"80px"
/>
<
col
width
=
"60px"
/>
<
col
width
=
"140px"
/>
<
col
width
=
"120px"
/>
<
tr
>
<
td
rowspan
=
"2"
>
<
h2
><%# ForecastDayDisplay(Eval("ForecastName"), Eval("DayOfWeek"))%></
h2
>
<
span
class
=
"smc_body"
><%#Eval("ModifiedDate", "{0:g}")%></
span
>
</
td
>
<
td
rowspan
=
"2"
>
<
asp:RadioButton
ID
=
"radioManualEdit"
runat
=
"server"
Text
=
"Manual"
Checked='<%# Bind("Manual") %>' GroupName="manualAuto" />
<
br
/>
<
asp:RadioButton
ID
=
"radioDataFeedEdit"
runat
=
"server"
Text
=
"Data Feed"
Checked='<%# (!(Convert.ToBoolean(Eval("Manual")))) %>' GroupName="manualAuto" />
</
td
>
<
td
rowspan
=
"2"
>
<
telerik:RadComboBox
ID
=
"listWeather"
CssClass
=
"smc_form"
AppendDataBoundItems
=
"true"
DataSourceID
=
"weatherListDataSource"
DataTextField
=
"weatherName"
DataValueField
=
"weatherId"
Width
=
"190px"
runat
=
"server"
DropDownWidth
=
"250px"
Height
=
"200px"
SelectedValue='<%# Bind("ConditionId")%>' >
<
Items
>
<
telerik:RadComboBoxItem
Text
=
"-"
Value
=
"0"
/>
</
Items
>
</
telerik:RadComboBox
>
</
td
>
<
td
align
=
"right"
><%# Eval("TempLabel")%></
td
>
<
td
>
<
asp:TextBox
ID
=
"txtTemp"
runat
=
"server"
Width
=
"25px"
Text='<%# Bind("Temp")%>' CssClass="smc_form flow_right" MaxLength="5" AutoCompleteType="None" >
</
asp:TextBox
> <
span
class
=
"smc_bodybold"
>°C</
span
>
</
td
>
<
td
align
=
"right"
>Text:</
td
>
<
td
>
<
asp:TextBox
ID
=
"txtShortText"
runat
=
"server"
Width
=
"100px"
Text='<%# Bind("ShortText")%>' CssClass="smc_form" MaxLength="128" >
</
asp:TextBox
>
</
td
>
<
td
rowspan
=
"2"
>UV Index:
<
br
/>
<
asp:DropDownList
ID
=
"listUvIndex"
runat
=
"server"
CssClass
=
"smc_form"
Width
=
"120px"
SelectedValue='<%# Bind("UvIndex")%>' >
<
asp:ListItem
Text
=
"-"
Value
=
"-1"
></
asp:ListItem
>
<
asp:ListItem
Text
=
"0 - Low"
Value
=
"0"
></
asp:ListItem
>
<
asp:ListItem
Text
=
"1 - Low"
Value
=
"1"
></
asp:ListItem
>
<
asp:ListItem
Text
=
"2 - Low"
Value
=
"2"
></
asp:ListItem
>
<
asp:ListItem
Text
=
"3 - Moderate"
Value
=
"3"
></
asp:ListItem
>
<
asp:ListItem
Text
=
"4 - Moderate"
Value
=
"4"
></
asp:ListItem
>
<
asp:ListItem
Text
=
"5 - Moderate"
Value
=
"5"
></
asp:ListItem
>
<
asp:ListItem
Text
=
"6 - High"
Value
=
"6"
></
asp:ListItem
>
<
asp:ListItem
Text
=
"7 - High"
Value
=
"7"
></
asp:ListItem
>
<
asp:ListItem
Text
=
"8 - Very High"
Value
=
"8"
></
asp:ListItem
>
<
asp:ListItem
Text
=
"9 - Veru High"
Value
=
"9"
></
asp:ListItem
>
<
asp:ListItem
Text
=
"10 - Very High"
Value
=
"10"
></
asp:ListItem
>
<
asp:ListItem
Text
=
"11+ - Extreme"
Value
=
"11"
></
asp:ListItem
>
</
asp:DropDownList
>
</
td
>
</
tr
>
<
tr
>
<
td
align
=
"right"
><%# Eval("Temp2Label")%></
td
>
<
td
>
<
asp:TextBox
ID
=
"txtTemp2"
runat
=
"server"
Width
=
"25px"
Text='<%# Bind("Temp2")%>' CssClass="smc_form flow_right" MaxLength="5" AutoCompleteType="None" >
</
asp:TextBox
> <
span
class
=
"smc_bodybold"
>°C</
span
>
</
td
>
<
td
align
=
"right"
>P.O.P.:</
td
>
<
td
>
<
asp:TextBox
ID
=
"txtPop"
runat
=
"server"
Width
=
"25px"
Text='<%# Bind("Pop")%>' CssClass="smc_form flow_right" MaxLength="5" AutoCompleteType="None">
</
asp:TextBox
> <
span
class
=
"smc_bodybold"
>%</
span
>
</
td
>
<
td
></
td
>
</
tr
>
</
table
>
</
EditItemTemplate
>
</
MasterTableView
>
</
telerik:RadGrid
>