2012-03-22 63 views
2

我有一個DataGrid,其數據源是對象的集合。現在,datagrid設置爲僅顯示對象屬性的子集。其中一個隱藏的屬性是一個ID變量,我需要獲取一旦相應的行對應的行被選中。基於網格行檢索隱藏對象屬性行項目選擇C#

我知道你可以使用SelectIndexChanged事件處理程序來監聽行點擊...但是如何才能獲得實際原始對象對應的行?

回答

0

可以訪問DataItem如再投項目爲適當的類型,並從那裏訪問其屬性

快速link顯示這是如何實現的。

+0

嗯 - 我是新來的.net我該怎麼分配DataItem?我需要語法! – user559142 2012-03-22 16:15:35

+0

eep不確定RadGrid(看到上面的評論,並注意到telerik標籤) – 2012-03-22 16:17:35

+0

我不認爲這很重要 - 它和GridView一樣,因爲這個工具是建立在.NET實現上的,否則我該怎麼做對於GridView – user559142 2012-03-22 16:19:41

1

我看到你用「Telerik」標記了你的問題。

您使用的是DataGrid還是RadGrid?是。

然後指定在.aspx文件調用的事件:

<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」 與你的對象的類型。

+0

看起來很棒!我正在使用RadGrid。 – user559142 2012-03-22 16:13:05

+1

我編輯了我的答案以適合您的需求。 – 2012-03-22 17:34:53

+0

我想你應該使用Telerik RadGrid Property DataKeyNames ..在下面提供了一個完整的答案 – 2012-03-23 13:04:41

0

當使用Telerik RadGrid時,您應該使用Telerik API,它提供了2個可以設置的屬性:DataKeyNames和ClientDataKeyNames。只要該列出現在您的初始數據源中,無論您在這兩個屬性中指定的是哪一行,都可以在服務器端和客戶端訪問。包括下面如何在的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 
     } 
    } 

,然後檢索使用客戶端事件OnRowSelected的行選擇隱藏字段值客戶端側

function RowSelected(sender,eventArgs) 
{ 
    var HiddenVal1 = eventArgs.getDataKeyValue("HiddenVal1") 
    //do stuff 
}