基于网格行项选择C#检索隐藏对象属性

时间:2012-03-22 15:48:46

标签: c# .net visual-studio datagrid telerik

我有一个DataGrid,其数据源是一个对象集合。现在,数据网格设置为仅显示对象属性的子集。隐藏属性之一是ID变量,一旦选择了与该对象相对应的行,我需要获取该ID变量。

我知道你可以使用SelectIndexChanged事件处理程序来监听行点击次数....但是如何才能获得对应的实际原始对象呢?

3 个答案:

答案 0 :(得分: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”替换为您的对象类型。

答案 1 :(得分:0)

您可以访问DataItem,然后将项目转换为适当的类型并从那里访问其属性

快速link显示了如何实现这一目标。

答案 2 :(得分: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
        }
    }

然后使用ClientEvents OnRowSelected

在行选择上检索隐藏字段值客户端
function RowSelected(sender,eventArgs)
{
    var HiddenVal1 = eventArgs.getDataKeyValue("HiddenVal1")
    //do stuff
}