我有一個DataGrid,其數據源是對象的集合。現在,datagrid設置爲僅顯示對象屬性的子集。其中一個隱藏的屬性是一個ID變量,我需要獲取一旦相應的行對應的行被選中。基於網格行檢索隱藏對象屬性行項目選擇C#
我知道你可以使用SelectIndexChanged事件處理程序來監聽行點擊...但是如何才能獲得實際原始對象對應的行?
我有一個DataGrid,其數據源是對象的集合。現在,datagrid設置爲僅顯示對象屬性的子集。其中一個隱藏的屬性是一個ID變量,我需要獲取一旦相應的行對應的行被選中。基於網格行檢索隱藏對象屬性行項目選擇C#
我知道你可以使用SelectIndexChanged事件處理程序來監聽行點擊...但是如何才能獲得實際原始對象對應的行?
可以訪問DataItem
如再投項目爲適當的類型,並從那裏訪問其屬性
快速link顯示這是如何實現的。
我看到你用「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」 與你的對象的類型。
看起來很棒!我正在使用RadGrid。 – user559142 2012-03-22 16:13:05
我編輯了我的答案以適合您的需求。 – 2012-03-22 17:34:53
我想你應該使用Telerik RadGrid Property DataKeyNames ..在下面提供了一個完整的答案 – 2012-03-23 13:04:41
當使用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
}
嗯 - 我是新來的.net我該怎麼分配DataItem?我需要語法! – user559142 2012-03-22 16:15:35
eep不確定RadGrid(看到上面的評論,並注意到telerik標籤) – 2012-03-22 16:17:35
我不認爲這很重要 - 它和GridView一樣,因爲這個工具是建立在.NET實現上的,否則我該怎麼做對於GridView – user559142 2012-03-22 16:19:41