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

Getting values from controls using EditFormType="AutoGenerated"

1 Answer 165 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Reid
Top achievements
Rank 2
Reid asked on 07 May 2011, 04:51 PM
Hello,


I have a RadGrid that is using EditFormType="AutoGenerated".  I am using the InsertCommand handler to harvest the values from the controls and insert a "Video" record.  There are a couple of RadComboBox controls, numerous RadTextBox controls and a RadEditor.

The grid also has GridTemplateColumn definitions for a couple of the RadTextBoxes so that I can attach the Validator to validate an integer was entered.  The RadComboBoxes are also in a GridTemplateColumn.  

There are other grids in the project that use EditFormType="AutoGenerated"  and I am able to get the values looping through the RenderColumns.  This works..

foreach (GridColumn column in e.Item.OwnerTableView.RenderColumns)
   {
          if (column is IGridEditableColumn)
                {
                    IGridEditableColumn editableCol = (column as IGridEditableColumn);
                    if (editableCol.IsEditable)
                    {
                        editor = editMan.GetColumnEditor(editableCol);
  
  
                        if (editor is GridTextColumnEditor)
                        {
                            editorText = (editor as GridTextColumnEditor).Text;
                            editorValue = (editor as GridTextColumnEditor).Text;
  
                            if (editableCol.Column.UniqueName == "AddressTypeStr")
                            {
                                newAddressType.AddressTypeStr = editorValue.ToString();
                            }
  
                            if (editableCol.Column.UniqueName == "TypeDescription")
                            {
                                newAddressType.TypeDescription = editorValue.ToString();
                            }
                        }
                    }
                }
            } // ForEach

If I use that same construct for the way this template is layed out I am not sure how to access the values in the GridBoundColumns because the cast below does not work.

if (editor is GridBoundColumn)
  {
editorText = (editor as GridBoundColumn).Text;
editorValue = (editor as GridBoundColumn).Text;
   }


So I am unsure how to get the values from this scenario.  Here is my markup for the RadGrid.

<telerik:RadGrid ID="ctrlRadGridVideos" runat="server"  Height="700"
                  AllowFilteringByColumn="True"  EnableAJAX="true"
               AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" GridLines="None"
               ShowGroupPanel="True" ShowStatusBar="True" Skin="Telerik">
               <ClientSettings EnableRowHoverStyle="true" EnablePostBackOnRowClick="true" AllowColumnsReorder="true"
                   AllowDragToGroup="True">
                   <Selecting AllowRowSelect="True" />
                   <Scrolling AllowScroll="True" UseStaticHeaders="True" />
                   <Resizing AllowColumnResize="True" />
               </ClientSettings>
               <MasterTableView CommandItemDisplay="TopAndBottom" DataKeyNames="PrimaryKey" EditItemStyle-ForeColor="#669999">
                   <RowIndicatorColumn>
                       <HeaderStyle Width="100px" />
                   </RowIndicatorColumn>
                   <ExpandCollapseColumn>
                       <HeaderStyle Width="100px" />
                   </ExpandCollapseColumn>
                   <Columns>
                       <telerik:GridEditCommandColumn HeaderStyle-Width="50" ItemStyle-ForeColor="Blue"
                                           UniqueName="Edit">
                                           <HeaderStyle Width="50px" />
                                           <ItemStyle ForeColor="Blue" />
                                       </telerik:GridEditCommandColumn>
                       <telerik:GridBoundColumn DataField="VideoTitle" HeaderText="Video Title" UniqueName="VideoTitle" EditFormColumnIndex="0"
                        ShowSortIcon="true">
                       </telerik:GridBoundColumn>                                        
                       <telerik:GridBoundColumn DataField="VideoSubTitle" HeaderText="Sub Title" UniqueName="VideoSubTitle" EditFormColumnIndex="0"
                        ShowSortIcon="true">
                       </telerik:GridBoundColumn>
                       <telerik:GridTemplateColumn HeaderText="Description" UniqueName="VideoDescription" EditFormColumnIndex="1" Visible="false"  
                           HeaderStyle-VerticalAlign="Top" HeaderStyle-Height="100%" ShowSortIcon="true">  
                           <EditItemTemplate>  
                               <telerik:RadEditor ID="ctrlVideoDescriptionRadEditor" runat="server" Content='<%# Bind("VideoDescription") %>'  
                                    Height="100%" Width="100%" Skin="Web20">
                                    <CssFiles>
                                      <telerik:EditorCssFile Value="~/Content/css/RadEditorContentArea.css" />
                                    </CssFiles>
                               </telerik:RadEditor>
                           </EditItemTemplate>  
                                 </telerik:GridTemplateColumn>  
                       <telerik:GridTemplateColumn HeaderText="Type" UniqueName="VideoType" EditFormColumnIndex="0" Visible="false">  
                           <EditItemTemplate>  
                               <telerik:RadComboBox ID="ctrlVideoTypeRadComboBox" runat="server"  
                                     Width="220px" Skin="Web20" />  
                           </EditItemTemplate>  
                           <ItemTemplate>  
                               <asp:Label ID="ctrlVideoTypeLabel" runat="server" Text="Video Type" />  
                           </ItemTemplate>  
                       </telerik:GridTemplateColumn>  
                       <telerik:GridTemplateColumn HeaderText="Category" UniqueName="VideoCategory" EditFormColumnIndex="0" Visible="false">  
                           <EditItemTemplate>  
                               <telerik:RadComboBox ID="ctrlVideoCategoryRadComboBox" runat="server"  
                                     Width="220px" Skin="Web20" />  
                           </EditItemTemplate>  
                           <ItemTemplate>  
                               <asp:Label ID="ctrlVideoCategoryLabel" runat="server" Text="Video Category" />  
                           </ItemTemplate>  
                       </telerik:GridTemplateColumn>  
                       <telerik:GridBoundColumn DataField="VideoHyperlink" HeaderText="URL Hyperlink" UniqueName="VideoHyperlink" 
                         EditFormColumnIndex="0" Visible="false">
                       </telerik:GridBoundColumn>
                         
                       <telerik:GridBoundColumn DataField="VideoSEOKeywords" HeaderText="SEO Keywords" UniqueName="SEOKeywords" 
                          EditFormColumnIndex="0" Visible="false">
                       </telerik:GridBoundColumn>
                       <telerik:GridBoundColumn DataField="VideoSEODescription" HeaderText="SEO Description" UniqueName="VideoSEODescription" 
                          EditFormColumnIndex="0" Visible="false">
                       </telerik:GridBoundColumn>
                       <telerik:GridTemplateColumn HeaderText="Rating" UniqueName="Rating" EditFormColumnIndex="0">
                           <EditItemTemplate>
                               <asp:TextBox ID="ctrlVideoRatingRadTextBox" runat="server" ValidationGroup="checkRating"
                                   Width="80px" />
                               <asp:RegularExpressionValidator ID="RegularExpressionValidatorRating" runat="server" ControlToValidate="ctrlVideoRatingRadTextBox"
                                   ErrorMessage="Please Enter Only Numbers" ValidationExpression="^\d+$" ValidationGroup="checkRating" ForeColor="Red">
                                </asp:RegularExpressionValidator>
                           </EditItemTemplate>
                           <ItemTemplate>
                               <asp:Label ID="ctrlVideoRatingLabel" runat="server" Text="" />
                           </ItemTemplate>
                       </telerik:GridTemplateColumn>
                       <telerik:GridTemplateColumn HeaderText="Height" UniqueName="Height" EditFormColumnIndex="0" Visible="false">
                           <EditItemTemplate>
                               <asp:TextBox ID="ctrlVideoHeightTextBox" runat="server" ValidationGroup="checkHeight"
                                   Width="80px" />
                               <asp:RegularExpressionValidator ID="RegularExpressionValidatorHeight" runat="server" ControlToValidate="ctrlVideoHeightTextBox"
                                   ErrorMessage="Please Enter Only Numbers" ValidationExpression="^\d+$" ValidationGroup="checkHeight" ForeColor="Red">
                                </asp:RegularExpressionValidator>
                           </EditItemTemplate>
                           <ItemTemplate>
                               <asp:Label ID="ctrlVideoHeightLabel" runat="server" Text="Height" />
                           </ItemTemplate>
                       </telerik:GridTemplateColumn>
                       <telerik:GridTemplateColumn HeaderText="Width" UniqueName="Width" EditFormColumnIndex="0" Visible="false">
                           <EditItemTemplate>
                               <asp:TextBox ID="ctrlVideoWidthTextBox" runat="server" ValidationGroup="checkWidth"
                                   Width="80px" />
                               <asp:RegularExpressionValidator ID="RegularExpressionValidatorWidth" runat="server" ControlToValidate="ctrlVideoWidthTextBox"
                                   ErrorMessage="Please Enter Only Numbers" ValidationExpression="^\d+$" ValidationGroup="checkWidth" ForeColor="Red">
                                </asp:RegularExpressionValidator>
                           </EditItemTemplate>
                           <ItemTemplate>
                               <asp:Label ID="ctrlVideoWidthLabel" runat="server" Text="Width" />
                           </ItemTemplate>
                       </telerik:GridTemplateColumn>
                       <%-- <telerik:GridTemplateColumn HeaderText="Hyperlink" UniqueName="VideoHyperlink" EditFormColumnIndex="0">  
                           <EditItemTemplate>  
                               <telerik:RadTextBox ID="ctrlVideoHyperlinkRadTextBox" runat="server"  
                                     Width="220px" Skin="Web20" />  
                           </EditItemTemplate>  
                           <ItemTemplate>  
                               <asp:Label ID="ctrlVideoHyperLinkLabel" runat="server" Text="Video Hyperlink" />  
                           </ItemTemplate>  
                       </telerik:GridTemplateColumn>  --%>
                       <telerik:GridButtonColumn CommandName="Delete" Text="Delete" UniqueName="Delete"
                                           HeaderStyle-Width="50" ConfirmText="Confirm: Delete Selected Video?" ConfirmTitle="Confirmation"
                                           ItemStyle-ForeColor="Blue">
                                           <HeaderStyle Width="50px" />
                                           <ItemStyle ForeColor="Blue" />
                                       </telerik:GridButtonColumn>
                   </Columns>
                   <EditItemStyle ForeColor="#669999" />
                   <PagerStyle AlwaysVisible="True" />
                   <EditFormSettings EditFormType="AutoGenerated" FormStyle-Height="500" FormStyle-Width="100%" ColumnNumber="3" >
                      <%-- <EditColumn UniqueName="EditColumn0" >
                       </EditColumn>--%>
                       <FormTableItemStyle Wrap="False"></FormTableItemStyle>
                       <FormCaptionStyle CssClass="EditFormHeader"></FormCaptionStyle>
                       <FormMainTableStyle GridLines="None" CellSpacing="0" CellPadding="3" Width="100%" />
                       <FormTableStyle GridLines="Horizontal" CellSpacing="0" CellPadding="2" CssClass="module"    Height="110px" Width="100%" />
                       <FormTableAlternatingItemStyle Wrap="False"></FormTableAlternatingItemStyle>
                 
                       
                       <FormStyle Height="700px" Width="100%" />
                        
                   </EditFormSettings>
               </MasterTableView>
           </telerik:RadGrid>

1) So I am unclear how to get the values from the GridBoundColumns or the nested controls in the GridTemplateColumns.

2) Also, this scenario is in INSERT.  Does it differ in the UpdateCommand handler?

Any suggestions would be appreciated.

Thanks,
Reid

1 Answer, 1 is accepted

Sort by
0
Reid
Top achievements
Rank 2
answered on 07 May 2011, 06:09 PM
Ok, I am replying to my post to let others know what the resolve is for this issue.  The key was to use the GridCommandEventArgs (item) object to extract the GridBoundColumn values and use the GridEditManager.GetColumnValue("XX") method for the GridTemplate columns.  You need to get the GridTemplateColumns using the UniqueIndex value of that Template column and then get the editor contained in it, whatever that may be and cast it to your specific type of editor.

protected void ctrlRadGridVideos_InsertCommand(object source, GridCommandEventArgs e)
{
    GridEditFormInsertItem insertItem = (GridEditFormInsertItem) e.Item;
    GridEditManager editMan = insertItem.EditManager;         
    Account userAccount = (Account) Session["AccountModel"];
    IGridColumnEditor editor = null;
    RadTextBox radTextBox = null;
    TextBox textBox = null;
    RadComboBox comboBox = null;
       
    tbl_Video newVideo = new Entities.tbl_Video();
    newVideo.PrimaryKey = Guid.NewGuid();
    newVideo.CreatedDT = DateTime.Now;
    newVideo.DataAction = Enumerations.DataActionStateEnum.Insert;
    newVideo.CreatedByFK = userAccount.SystemUserPrimaryKey;
    newVideo.StorageStatusTypeFK = DefaultStorageStatusType.PrimaryKey;

    if (e.CommandName == RadGrid.PerformInsertCommandName)
    {
        GridEditableItem item = e.Item as GridEditableItem;
        newVideo.VideoTitle = (item["VideoTitle"].Controls[0] as TextBox).Text;
        newVideo.VideoSubTitle = (item["VideoSubTitle"].Controls[0] as TextBox).Text;
        newVideo.VideoHyperlink = (item["VideoHyperlink"].Controls[0] as TextBox).Text;
        newVideo.SEOKeywords = (item["SEOKeywords"].Controls[0] as TextBox).Text;
        newVideo.SEODescription = (item["SEODescription"].Controls[0] as TextBox).Text;
        editor = editMan.GetColumnEditor("VideoDescription");

        RadEditor radEditor = (RadEditor) editor.ContainerControl.Controls[1];
        newVideo.VideoDescription = radEditor.Content.Trim();

        editor = editMan.GetColumnEditor("Rating");
        textBox = (TextBox) editor.ContainerControl.Controls[1];
        newVideo.Rating = Convert.ToInt32(textBox.Text);

        editor = editMan.GetColumnEditor("Height");
        textBox = (TextBox) editor.ContainerControl.Controls[1];
        newVideo.Height = Convert.ToInt32(textBox.Text);

        editor = editMan.GetColumnEditor("Width");
        textBox = (TextBox) editor.ContainerControl.Controls[1];
        newVideo.Width = Convert.ToInt32(textBox.Text);

        editor = editMan.GetColumnEditor("VideoType");
        comboBox = (RadComboBox) editor.ContainerControl.Controls[1];
        newVideo.VideoTypeFK = new Guid(comboBox.SelectedValue);

        editor = editMan.GetColumnEditor("VideoCategory");
        comboBox = (RadComboBox) editor.ContainerControl.Controls[1];
        newVideo.VideoCategoryFK= new Guid(comboBox.SelectedValue);

      } 
}

Best wishes!

Reid
Tags
Grid
Asked by
Reid
Top achievements
Rank 2
Answers by
Reid
Top achievements
Rank 2
Share this question
or