2012-03-22 12 views
2

データソースがオブジェクトのコレクションであるDataGridがあります。これで、DataGridはオブジェクトプロパティのサブセットのみを表示するように設定されました。隠れたプロパティの1つは、そのオブジェクトに対応する行が選択されたら取得する必要のあるID変数です。グリッド行アイテムに基づいて隠しオブジェクトプロパティを取得するC#

私はあなたがSelectIndexChangedイベントハンドラを使って行のクリックを聞くことができることは知っています....しかし、行に対応する実際の元のオブジェクトを得るにはどうしたらいいですか?

答えて

0

はあなたにDataItemにアクセスし、適切な型に項目をキャストし、そこからそのプロパティにアクセスすることができます

クイックlinkは、これを達成する方法を示しています。

+0

html - 私はDataItemをどのように割り当てるのですか?私は構文が必要です! – user559142

+0

RadGridについてはわかりません(上記のコメントを見て、telerikタグに気づきました) –

+0

私はそれが重要だとは思わない - このツールは.NET実装上に構築されているのでGridViewと同じです...そうでなければ私はどのようにしますかGridViewの場合 – user559142

1

"Telerik"であなたの質問にタグ付けしました。

DataGridまたはRadGridを使用していますか?はい。

<telerik:RadGrid ID="RadGrid1" runat="server" 
      AutoGenerateColumns="False" 
      GridLines="None" 
      OnSelectedIndexChanged="RadGrid1_SelectedIndexChanged" > 
      (...) 
</telerik:RadGrid> 

そして、あなたの.aspファイル内のイベントを宣言します:

protected void RadGrid1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    var dataItem = e.Item.DataItem; 
    if (dataItem != null) 
    { 
     int dataItemID = (dataItem As ObjectClassName).ID; 
    } 
} 

* "ObjectClassName" を置き換えますと

次に、あなたの.aspxのファイルで呼び出すためにどのイベント指定あなたのオブジェクトのタイプ。

+0

Well spotted!私はRadGridを使用しています。 – user559142

+1

私のニーズに合わせて答えを編集しました。 –

+0

私はTelerik RadGridプロパティDataKeyNamesを使うべきだと思う –

0

Telerik RadGridを使用する場合、Telerik APIを使用して、設定できる2つのプロパティ(DataKeyNamesとClientDataKeyNames)を提供する必要があります。最初のデータソースに列が表示されている限り、これらの2つのプロパティで指定したものは、サーバー側とクライアント側の両方にアクセスできます。変更され、選択したインデックス上の隠しフィールドの値をサーバー側の取得のSelectedIndexChanged(サーバ側)とOnRowSelected(クライアント側)

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

にこれらの値を取得する方法について、以下に含ま:

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(); 
      var hiddenfield1 = dataItem.GetDataKeyValue("HiddenVal1").ToString(); 
      //do stuff 
     } 
    } 

してから取得しClientEvents OnRowSelectedを使用して、非表示フィールドの値をクライアント側で選択します。

function RowSelected(sender,eventArgs) 
{ 
    var HiddenVal1 = eventArgs.getDataKeyValue("HiddenVal1") 
    //do stuff 
} 
関連する問題