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

How to get datakeyvalue from parent row

4 Answers 256 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Joe
Top achievements
Rank 1
Joe asked on 17 Jun 2013, 03:22 AM

my radgrid had 2 level (use Course_ID as a key to link)

Code as follows:

<telerik:RadGrid ID="RadGrid_TrainingProviderCourse" DataSourceID="LDS_Course" ShowStatusBar="True"
          AutoGenerateColumns="False" AllowSorting="True" runat="server"
          AllowPaging="True" GridLines="None" AllowAutomaticDeletes="True" AllowAutomaticInserts="True"
          AllowAutomaticUpdates="True" CellSpacing="0" Width="80%" Skin="Windows7">
          <PagerStyle Mode="NumericPages"></PagerStyle>
          <MasterTableView DataSourceID="LDS_Course" DataKeyNames="Course_ID" AllowMultiColumnSorting="True"
              Width="100%" CommandItemDisplay="Top" Name="Parent"
              AllowAutomaticDeletes="False" AllowAutomaticInserts="False"
              AllowAutomaticUpdates="False">
              <DetailTables>
                  <telerik:GridTableView DataKeyNames="ID"
                      DataSourceID="LDS_TrainingProviderCourse" Width="100%"
                      runat="server" CommandItemDisplay="Top" Name="SubLevel" >
                      <ParentTableRelation>
                          <telerik:GridRelationFields DetailKeyField="Course_ID"
                              MasterKeyField="Course_ID" />
                      </ParentTableRelation>
                      <CommandItemSettings ExportToPdfText="Export to PDF"></CommandItemSettings>
                      <RowIndicatorColumn Visible="True" FilterControlAltText="Filter RowIndicator column"></RowIndicatorColumn>
                      <ExpandCollapseColumn Visible="True" FilterControlAltText="Filter ExpandColumn column"></ExpandCollapseColumn>
 
                      <Columns>
                          <telerik:GridEditCommandColumn ButtonType="ImageButton" UniqueName="EditCommandColumn2">
                              <HeaderStyle Width="20px"></HeaderStyle>
                              <ItemStyle CssClass="MyImageButton"></ItemStyle>
                          </telerik:GridEditCommandColumn>
 
                          <telerik:GridBoundColumn SortExpression="Course_Fee_USD" HeaderText="Course_Fee_USD"
                              HeaderButtonType="TextButton" DataField="Course_Fee_USD"
                              UniqueName="Course_Fee_USD"  HeaderStyle-Width="200px"
                              FilterControlAltText="Filter Course_Fee_USD column">                                                              
                              <HeaderStyle Width="200px" />
                          </telerik:GridBoundColumn>                             
                                     
                          <telerik:GridBoundColumn SortExpression="Course_Fee_IDR"
                              HeaderText="Course_Fee_IDR" HeaderButtonType="TextButton"
                              DataField="Course_Fee_IDR" UniqueName="Course_Fee_IDR"
                              HeaderStyle-Width="200px" FilterControlAltText="Filter Course_Fee_IDR column">                                                                                                       
                              <HeaderStyle Width="200px" />
                          </telerik:GridBoundColumn>
 
                          <telerik:GridBoundColumn SortExpression="Course_ID" Visible="false"
                              HeaderText="Course_ID"
                              DataField="Course_ID" UniqueName="Course_ID"
                              HeaderStyle-Width="200px" FilterControlAltText="Filter Course_ID column">                                                                                                                                                                           
                          </telerik:GridBoundColumn>
 
                          <telerik:GridButtonColumn ConfirmText="Delete this record?" ButtonType="ImageButton"
                              CommandName="Delete" Text="Delete" UniqueName="DeleteColumn">
                              <HeaderStyle Width="20px"></HeaderStyle>
                              <ItemStyle HorizontalAlign="Center" CssClass="MyImageButton"></ItemStyle>
                          </telerik:GridButtonColumn>
 
                      </Columns>
 
                     <EditFormSettings EditFormType="Template">
                      <EditColumn FilterControlAltText="Filter EditCommandColumn1 column"
                                      UniqueName="EditCommandColumn1">
                       </EditColumn>
                       <FormTemplate>
 
                  <table id="Table2" cellspacing="2" cellpadding="1" width="50%" border="1" rules="none"
                      style="border-collapse: collapse;">
                      <tr class="EditFormHeader">
                      <td style="width:150px">
                      <asp:Label ID="Label5" Text="Training Provider" runat="server"></asp:Label>                                                           
                      </td>
                      <td>
                          <telerik:RadDropDownList ID="rdl_TrainingProvider" runat="server" DataSourceID="LDS_TrainingProvider" DefaultMessage="Please select..."
                           DataValueField="Training_Provider_ID" DataTextField="Internal_Name" >
                          </telerik:RadDropDownList>
                          <asp:RequiredFieldValidator ID="RequiredFieldValidator11" runat="server" ControlToValidate="rdl_TrainingProvider"
                              InitialValue="Please Select..." ErrorMessage="Please select a Training Provider."></asp:RequiredFieldValidator>  
                      </td>
                      </tr>
                      <tr >
                      <td >
                      <asp:Label ID="lb" Text="Course Fee (USD)" runat="server"></asp:Label>                                                           
                      </td>
                      <td>
                      <asp:TextBox ID="tb_Course_Fee_USD" runat="server" Text='<%# Bind("Course_Fee_USD") %>' TabIndex="2"></asp:TextBox>                                                           
                      <asp:RegularExpressionValidator ID="RegularExpressionValidator8" runat="server" Display="Dynamic"
                      ErrorMessage="Please, enter valid number." ValidationExpression="^(\d|,)*\.?\d*$" ControlToValidate="tb_Course_Fee_USD">
                      </asp:RegularExpressionValidator>
                      </td>
                      </tr>
                      <tr >
                      <td >
                      <asp:Label ID="Label2" Text="Course Fee (IDR)" runat="server"></asp:Label>                                                           
                      </td>
                      <td>
                      <asp:TextBox ID="tb_Course_Fee_IDR" runat="server" Text='<%# Bind("Course_Fee_IDR") %>' TabIndex="2"></asp:TextBox>                                                           
                      <asp:RegularExpressionValidator ID="RegularExpressionValidator9" runat="server" Display="Dynamic"
                      ErrorMessage="Please, enter valid number." ValidationExpression="^(\d|,)*\.?\d*$" ControlToValidate="tb_Course_Fee_IDR">
                      </asp:RegularExpressionValidator>
                      </td>
                      </tr>
                         <tr>
                          <td align="right" colspan="2">
                              <asp:Button ID="btnUpdate" Text='<%# IIf((TypeOf(Container) is GridEditFormInsertItem), "Insert", "Update") %>'
                                  runat="server" CommandName='<%# IIf((TypeOf(Container) is GridEditFormInsertItem), "PerformInsert", "Update")%>' >
                              </asp:Button
                              <asp:Button ID="btnDelete" Text="Delete" runat="server" CausesValidation="False"
                                  CommandName="Delete"></asp:Button>
                              <asp:Button ID="btnCancel" Text="Cancel" runat="server" CausesValidation="False"
                                  CommandName="Cancel"></asp:Button>
 
                          </td>
                      </tr>
 
                              </table>
                          </FormTemplate>
                      </EditFormSettings>
 
                      <PagerStyle PageSizeControlType="RadComboBox"></PagerStyle>
                  </telerik:GridTableView>
              </DetailTables>
 
  <CommandItemSettings ExportToPdfText="Export to PDF" ShowAddNewRecordButton="False"></CommandItemSettings>
  <RowIndicatorColumn Visible="True" FilterControlAltText="Filter RowIndicator column"></RowIndicatorColumn>
  <ExpandCollapseColumn Visible="True" FilterControlAltText="Filter ExpandColumn column"></ExpandCollapseColumn>
              <Columns>
                  <telerik:GridEditCommandColumn ButtonType="ImageButton" UniqueName="EditCommandColumn">
                      <HeaderStyle Width="20px"></HeaderStyle>
                      <ItemStyle CssClass="MyImageButton"></ItemStyle>
                  </telerik:GridEditCommandColumn>
 
                  <telerik:GridBoundColumn DataField="Course_ID"
                      FilterControlAltText="Filter Course_ID column" HeaderButtonType="TextButton"
                      HeaderText="Course_ID" ReadOnly="True" SortExpression="Course_ID" HeaderStyle-Width="200px"
                      UniqueName="Course_ID" Visible="false">
                      <HeaderStyle Width="200px" />
                  </telerik:GridBoundColumn>
 
                  <telerik:GridBoundColumn SortExpression="Course_Name" HeaderText="Course Name" HeaderButtonType="TextButton"
                      DataField="Course_Name" UniqueName="Course_Name"
                      FilterControlAltText="Filter Course_Name column" >
                  </telerik:GridBoundColumn>
 
                  <telerik:GridBoundColumn SortExpression="Course_Name_Ind"
                      HeaderText="Course Name (Ind)" HeaderButtonType="TextButton"
                      DataField="Course_Name_Ind" UniqueName="Course_Name_Ind"
                      HeaderStyle-Width="200px" FilterControlAltText="Filter Course_Name_Ind column">
                      <HeaderStyle Width="200px"></HeaderStyle>
                  </telerik:GridBoundColumn>
 
              </Columns>
 
              <EditFormSettings>
              <EditColumn UniqueName="EditCommandColumn1" FilterControlAltText="Filter EditCommandColumn1 column"></EditColumn>
              </EditFormSettings>
 
              <PagerStyle PageSizeControlType="RadComboBox"></PagerStyle>
                      </MasterTableView>
              <FilterMenu EnableImageSprites="False"></FilterMenu>
                  </telerik:RadGrid>
                   
          <asp:LinqDataSource ID="LDS_Course"
              runat="server" ContextTypeName="dcLRDBDataContext" EntityTypeName=""
              TableName="db_Courses">
          </asp:LinqDataSource>
                  <asp:LinqDataSource ID="LDS_TrainingProviderCourse"
              runat="server" ContextTypeName="dcLRDBDataContext" EntityTypeName=""
              TableName="db_Training_Providers_Course_Lists"
              Where="Course_ID == @Course_ID">
                      <WhereParameters>
                          <asp:Parameter Name="Course_ID" Type="Int32" />
                      </WhereParameters>
          </asp:LinqDataSource>

How can I get the Course_ID from master/parent when perform insert ?

my code behind:

Protected Sub RadGrid_TrainingProviderCourse_ItemCommand(ByVal source As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Handles RadGrid_TrainingProviderCourse.ItemCommand
    RadGrid_TrainingProviderCourse.MasterTableView.ClearEditItems()
 
 
 
    If e.CommandName = RadGrid.InitInsertCommandName Then   'Click Add New Record button           
        Dim editColumn As GridEditCommandColumn = CType(RadGrid_TrainingProviderCourse.MasterTableView.GetColumn("EditCommandColumn"), GridEditCommandColumn)
        editColumn.Visible = False
    ElseIf (e.CommandName = RadGrid.RebindGridCommandName AndAlso e.Item.OwnerTableView.IsItemInserted) Then
        e.Canceled = True
    Else
        Dim editColumn As GridEditCommandColumn = CType(RadGrid_TrainingProviderCourse.MasterTableView.GetColumn("EditCommandColumn"), GridEditCommandColumn)
        If Not editColumn.Visible Then  'Click Cancel button (both Insert and Update mode)
            editColumn.Visible = True
        End If
 
        Dim ddlTrainingProvider As RadDropDownList = DirectCast(e.Item.FindControl("rdl_TrainingProvider"), RadDropDownList)
        Dim txt_Course_Fee_USD As TextBox = DirectCast(e.Item.FindControl("tb_Course_Fee_USD"), TextBox)
        Dim txt_Course_Fee_IDR As TextBox = DirectCast(e.Item.FindControl("tb_Course_Fee_IDR"), TextBox)
        Dim dc As New dcLRDBDataContext
 
        If e.CommandName = "PerformInsert" Then
 
            Dim newRecord1 As New db_Training_Providers_Course_List
            dc.db_Training_Providers_Course_Lists.InsertOnSubmit(newRecord1)
 
            If ddlTrainingProvider.SelectedValue <> ddlTrainingProvider.DefaultMessage Then
                newRecord1.Training_Provider_ID = ddlTrainingProvider.SelectedValue
            End If
           
            newRecord1.Course_Fee_USD = txt_Course_Fee_USD.Text
            newRecord1.Course_Fee_IDR = txt_Course_Fee_IDR.Text
            newRecord1.LastUpdateDate = DateTime.Now
            newRecord1.LastUpdateBy = HttpContext.Current.Session("UserID")
            dc.SubmitChanges()
 
            RadGrid_TrainingProviderCourse.MasterTableView.ClearEditItems()
            RadGrid_TrainingProviderCourse.DataBind()
 
        ElseIf e.CommandName = "Update" Then
            Dim lid As Integer = e.Item.OwnerTableView.DataKeyValues(e.Item.ItemIndex)("ID")
 
            Dim rec = (From p In dc.db_Training_Providers_Course_Lists Where p.ID = lid).FirstOrDefault
            If Not rec Is Nothing Then
                If ddlTrainingProvider.SelectedValue <> ddlTrainingProvider.DefaultMessage Then
                    rec.Training_Provider_ID = ddlTrainingProvider.SelectedValue
                End If
                rec.Course_Fee_USD = txt_Course_Fee_USD.Text
                rec.Course_Fee_IDR = txt_Course_Fee_IDR.Text
                rec.LastUpdateBy = HttpContext.Current.Session("UserID")
                rec.LastUpdateDate = DateTime.Now
                dc.SubmitChanges()
            End If
 
            RadGrid_TrainingProviderCourse.MasterTableView.ClearEditItems()
            RadGrid_TrainingProviderCourse.DataBind()
        ElseIf e.CommandName = "Delete" Then
            Dim lid As Integer = e.Item.OwnerTableView.DataKeyValues(e.Item.ItemIndex)("ID")
            Dim rec2 = (From p In dc.db_Training_Providers_Course_Lists Where p.ID = lid).FirstOrDefault
            If Not IsNothing(rec2) Then
                dc.db_Training_Providers_Course_Lists.DeleteOnSubmit(rec2)
                dc.SubmitChanges()
            End If
 
            RadGrid_TrainingProviderCourse.MasterTableView.ClearEditItems()
            RadGrid_TrainingProviderCourse.DataBind()
        End If
 
        dc.Dispose()
    End If
End Sub

Thanks

4 Answers, 1 is accepted

Sort by
0
Shinu
Top achievements
Rank 2
answered on 17 Jun 2013, 04:11 AM
Hi,
Please try the following code snippet to access the datakeyvalue of the parent row while inserting into a nested grid.
VB:
Protected Sub RadGrid1_ItemCommand(source As Object, e As GridCommandEventArgs)
    If e.CommandName = "PerformInsert" Then
        Dim insertitem As GridEditFormInsertItem = DirectCast(e.Item, GridEditFormInsertItem)
        Dim nestedview As GridTableView = DirectCast(insertitem.OwnerTableView, GridTableView)
        Dim nestedviewItem As GridNestedViewItem = DirectCast(nestedview.NamingContainer.NamingContainer, GridNestedViewItem)
        Dim dataItem As GridDataItem = DirectCast(nestedviewItem.ParentItem, GridDataItem)
        Dim entityid As String = dataItem.GetDataKeyValue("Course_ID").ToString()
    End If
End Sub

Thanks,
Shinu.
0
Shinu
Top achievements
Rank 2
answered on 17 Jun 2013, 04:14 AM
Hi,
Please try the following code snippet to access the datakeyvalue of the parent row while inserting into a nested grid.
VB:
Protected Sub RadGrid1_ItemCommand(source As Object, e As GridCommandEventArgs)
    If e.CommandName = "PerformInsert" Then
        Dim insertitem As GridEditFormInsertItem = DirectCast(e.Item, GridEditFormInsertItem)
        Dim nestedview As GridTableView = DirectCast(insertitem.OwnerTableView, GridTableView)
        Dim nestedviewItem As GridNestedViewItem = DirectCast(nestedview.NamingContainer.NamingContainer, GridNestedViewItem)
        Dim dataItem As GridDataItem = DirectCast(nestedviewItem.ParentItem, GridDataItem)
        Dim entityid As String = dataItem.GetDataKeyValue("Course_ID").ToString()
    End If
End Sub

Also take a look into this help documantation.

Thanks,
Shinu.
0
Joe
Top achievements
Rank 1
answered on 17 Jun 2013, 05:04 AM
thanks for your reply.

But i had the following error message after implement the code

Unable to cast object of type 'Telerik.Web.UI.GridTableView' to type 'Telerik.Web.UI.GridNestedViewItem'.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.InvalidCastException: Unable to cast object of type 'Telerik.Web.UI.GridTableView' to type 'Telerik.Web.UI.GridNestedViewItem'.
0
Joe
Top achievements
Rank 1
answered on 19 Jun 2013, 08:52 AM
i solved the problem by using the following code behind:

Dim parentItem = CType(e.Item.OwnerTableView.ParentItem, GridDataItem)
  
Dim entityid As String = ""
  
If (Not parentItem Is Nothing) Then
  
entityid =
 
CType(parentItem.OwnerTableView.DataKeyValues(parentItem.ItemIndex)("Course_ID"), String)
 
End If

to get the parent data key (entityid)
Tags
Grid
Asked by
Joe
Top achievements
Rank 1
Answers by
Shinu
Top achievements
Rank 2
Joe
Top achievements
Rank 1
Share this question
or