在ASP.NET中获取Telerik RadGrid隐藏列的值

7

我有一个RadGrid,在其中隐藏了Id列。现在我想在链接按钮单击时获取其值。如果该列可见,则可以正常工作,但是当它不可见时,它显示为空值。我的代码是:

 protected void RadGrid1_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
{
    if (e.CommandName == "Detail")
    {
        GridDataItem dataItm = e.Item as GridDataItem;

        string value = dataItm["Id"].Text;
    }
}

1
你能发一下你的网格 HTML 代码吗? - Sora
http://www.telerik.com/forums/breaking-change-hidden-column-cell-text-is-not-persisted-in-viewstate - Chiramisu
3个回答

18

请尝试使用以下代码片段。

ASPX

 <telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="false" OnNeedDataSource="RadGrid1_NeedDataSource"
    OnItemCommand="RadGrid1_ItemCommand">
    <MasterTableView DataKeyNames="ID">
        <Columns>
            <telerik:GridBoundColumn DataField="ID" UniqueName="ID" HeaderText="ID">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="ID" UniqueName="ID1" HeaderText="ID" Visible="false">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="ID" UniqueName="ID2" HeaderText="ID" Display="false">
            </telerik:GridBoundColumn>
            <telerik:GridTemplateColumn>
                <ItemTemplate>
                    <asp:Button ID="Button1" runat="server" CommandName="Detail" CommandArgument='<%# Eval("ID") %>' />
                </ItemTemplate>
            </telerik:GridTemplateColumn>
        </Columns>
    </MasterTableView>
</telerik:RadGrid>

ASPX.CS

protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
    dynamic data = new[] {
        new { ID = 1, Name ="Name1"},
        new { ID = 2, Name = "Name2"},
        new { ID = 3, Name = "Name3"},
         new { ID = 4, Name = "Name4"},
        new { ID = 5, Name = "Name5"}
    };

    RadGrid1.DataSource = data;

}

protected void RadGrid1_ItemCommand(object sender, GridCommandEventArgs e)
{
    if (e.CommandName == "Detail")
    {
        GridDataItem item = e.Item as GridDataItem;

        string strID = item.GetDataKeyValue("ID").ToString(); // We are able to get ID field value here
        string strID1 = item["ID1"].Text; // We are NOT able to get ID field value here Because column is Visible false
        string strID2 = item["ID2"].Text; // We are able to get ID field value here
        string strCommandArgument = e.CommandArgument.ToString(); // We are able to get ID field value here

    }
}

请使用显示属性代替可见属性。


1
这是最佳方法。请注意他使用的是Visible="false"而不是Display="false"。 - msigman

3

最简单的方法是将Visible设置为true,Display设置为false,这样就可以了。


点赞这个。确实是最简单的方法,而且完美运作。 - ddaniel

1

这一列是否总是不可见?如果是,您可以将其ID放入DataKeyNames属性中,如下所示:

DataKeyNames="ID"

然后通过以下方式访问它:

var id = (int)dataItm.getDataKeyValue("ID");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接