C# GridView/RadGrid-从数据源中提取原始类型对象

C# GridView/RadGrid-从数据源中提取原始类型对象,c#,.net,visual-studio,telerik,C#,.net,Visual Studio,Telerik,我使用Telerik RadGrid控件来显示从db中提取的数据 标记如下所示: <MasterTableView runat="server" AllowMultiColumnSorting="false" DataKeyNames="PersonNumber" AllowNaturalSort="false"> <Columns> <telerik:GridClientSelectColumn Unique

我使用Telerik RadGrid控件来显示从db中提取的数据

标记如下所示:

<MasterTableView runat="server" AllowMultiColumnSorting="false" DataKeyNames="PersonNumber" AllowNaturalSort="false">
            <Columns>
                <telerik:GridClientSelectColumn UniqueName="RowSelectColumn"  HeaderText="&nbsp;" Resizable="false" Reorderable="false">
                    <HeaderStyle HorizontalAlign="Center" Width="18px" />
                    <ItemStyle HorizontalAlign="Center" Width="18px" />
                </telerik:GridClientSelectColumn>
                <telerik:GridBoundColumn HeaderText="Name" UniqueName="Name" DataField="Name" SortExpression="Name" HtmlEncode="false">
                    <HeaderStyle HorizontalAlign="Center" Width="250px" />
                    <ItemStyle HorizontalAlign="Left" Width="250px" />
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn HeaderText="E-mail Address" UniqueName="EmailAddress"  DataField="EmailAddress" SortExpression="EmailAddress" HtmlEncode="false">
                    <HeaderStyle HorizontalAlign="Center" Width="200px" />
                    <ItemStyle HorizontalAlign="Left" Width="200px" />
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn HeaderText="Invite Status" UniqueName="InviteResult" DataField="InviteResult" SortExpression="InviteResult">
                    <HeaderStyle HorizontalAlign="Center" />
                    <ItemStyle HorizontalAlign="Left"/>
                </telerik:GridBoundColumn>            
            </Columns>
        </MasterTableView>


我有一个类,比如MyObject,它映射到一个数据行(一些属性没有显示在网格中)。我需要它,因此当用户选择一行时,我能够检索该行表示/绑定到的原始对象。我知道关键是从数据源中提取,但如何将行映射到源中的等效数据?

您可以使用DataKeyName来包含网格中不存在的值,方法是在检索行时设置这些值,无论是客户端还是服务器端,您都可以访问其他列,最常见的用途是选择两个函数:dexchanged(服务器端)和OnRowSelected(客户端)。您可以将额外的列存储在DataKeyName中,也可以使用主键和一些linq从数据源检索相同的行

<telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="false"
  OnSelectedIndexChanged="RadGrid1_SelectedIndexChanged">
  <MasterTableView DataKeyNames="Id,HiddenVal1,HiddenVal2" ClientDataKeyNames="Id,HiddenVal1,HiddenVal2,clientsideSpecialId">
    <Columns>
      <telerik:GridButtonColumn CommandName="Select" Text="Select" UniqueName="SelectColumn" />
      <telerik:GridBoundColumn UniqueName="ContactName" HeaderText="Contact name" DataField="ContactName" />
      <telerik:GridBoundColumn UniqueName="ContactTitle" HeaderText="Contact title" DataField="ContactTitle" />
    </Columns>
  </MasterTableView>
  <ClientSettings>
   <ClientEvents OnRowSelected="RowSelected"/>
  </ClientSettings>
</telerik:RadGrid>

如果可能的话,我建议将您需要的任何列添加到dataKeyNames中。

您可以使用dataKeyNames来包含网格中不存在的值,方法是在检索行时设置这些值,无论是客户端还是服务器端,您都可以访问其他列,最常见的用途是选择两个函数:dexchanged(服务器端)和OnRowSelected(客户端)。您可以将额外的列存储在DataKeyName中,也可以使用主键和一些linq从数据源检索相同的行

<telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="false"
  OnSelectedIndexChanged="RadGrid1_SelectedIndexChanged">
  <MasterTableView DataKeyNames="Id,HiddenVal1,HiddenVal2" ClientDataKeyNames="Id,HiddenVal1,HiddenVal2,clientsideSpecialId">
    <Columns>
      <telerik:GridButtonColumn CommandName="Select" Text="Select" UniqueName="SelectColumn" />
      <telerik:GridBoundColumn UniqueName="ContactName" HeaderText="Contact name" DataField="ContactName" />
      <telerik:GridBoundColumn UniqueName="ContactTitle" HeaderText="Contact title" DataField="ContactTitle" />
    </Columns>
  </MasterTableView>
  <ClientSettings>
   <ClientEvents OnRowSelected="RowSelected"/>
  </ClientSettings>
</telerik:RadGrid>
如果可能的话,我建议在dataKeyNames中添加您需要的任何列