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>