2012-04-04 4 views
1

Ich benutze ein Telerik RadGrid-Steuerelement, um Daten aus einer db gezogen anzuzeigen.GridView/RadGrid - Original typisiertes Objekt aus Datenquelle extrahieren

Das Markup sieht wie folgt aus:

<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> 

Ich habe eine Klasse, sagen MyObject, die zu einer Datenreihe Karten (einige Eigenschaften nicht im Raster dargestellt). Ich brauche es also, wenn ein Benutzer eine Zeile auswählt, kann ich das ursprüngliche Objekt abrufen, an das die Zeile gebunden ist. Ich weiß, dass der Schlüssel aus der Datenquelle extrahiert werden muss, aber wie kann ich eine Zeile den entsprechenden Daten in der Quelle zuordnen?

Antwort

1

Sie können die DataKeyNames verwenden, um Werte einzuschließen, die in Ihrem Grid nicht vorhanden sind. Wenn Sie diese Zeilen beim Abrufen einer Zeile entweder client- oder serverseitig verwenden, haben Sie Zugriff auf zusätzliche Spalten. Die häufigsten Verwendungen sind mit den 2 Funktionen SelectedIndexChanged (Serverseitig) und OnRowSelected (clientseitig). Sie könnten entweder speichern Sie Ihre zusätzliche Spalten in den DataKeyNames oder einen Primärschlüssel und einige Linq verwenden die gleiche Zeile (n) aus Ihrer Datenquelle auf ausgewählten Index

<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> 

Abrufen diejenigen dataKeyName Werte Server-Seite abgerufen werden geändert:

protected void RadGrid1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (RadGrid1.SelectedItems == null || RadGrid1.SelectedItems.Count == 0) 
     return; 

    var dataItem = RadGrid1.SelectedItems[0] as GridDataItem; 
    if (dataItem != null) 
    { 
     var myId = dataItem.GetDataKeyValue("id").ToString(); 
     myTable = getDataSource();//stored in mem or retrieve from db again 
     //linq or whatever you want to retrieve that row (if you need to go back to your datasource 
     var name = from r in MyTable 
       where r.ID == myId 
       select r.Name; 
    } 
} 

Ich würde vorschlagen, was auch immer Spalten Sie DataKeyNames hinzufügen, wenn das möglich ist.

Verwandte Themen