This is a migrated thread and some comments may be shown as answers.

Batch Edit InPlace , Update All, ExtractValuesFromItem and SavedOldValues giving null

3 Answers 218 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Jonathan
Top achievements
Rank 1
Jonathan asked on 22 Feb 2012, 09:03 PM
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:
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>

3 Answers, 1 is accepted

Sort by
0
Jonathan
Top achievements
Rank 1
answered on 15 May 2012, 07:18 PM
I wonder is someone from Telerik might still find this post and reply to it....
0
Accepted
Antonio Stoilkov
Telerik team
answered on 18 May 2012, 09:54 AM
Hello Jonathan,

There are two reasons for this behavior. First you are looping through all edit items and not only the items that are in edit mode. You could add additional statement and check if the editItem.IsInEditMode. The second issue is the MasterTableView EditItemTemplate which prevents the RadGrid internal column editors to extract the values. You could use the approach used in the help article below to extract the values from the item.

You could achieve your scenario by following the code provided in the demo below:

Kind regards,
Antonio Stoilkov
the Telerik team
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now.
0
Jonathan
Top achievements
Rank 1
answered on 18 May 2012, 02:12 PM
Thanks for the reply. 

The reason I was not checking editItem.IsInEditMode is because all items in the grid are in edit mode. 

So it seems the real reason this doesn't work in this situation is because the MasterTableView EditItemTemplate prevents the RadGrid internal column editors to extract the values.

Thanks for the alternate suggestions - I have been able to make it work using similar code.

Jonathan
Tags
Grid
Asked by
Jonathan
Top achievements
Rank 1
Answers by
Jonathan
Top achievements
Rank 1
Antonio Stoilkov
Telerik team
Share this question
or