DetailRow中的按钮需要来自两个上层嵌套APSxGridViews的键

时间:2014-11-18 14:32:14

标签: devexpress master-detail aspxgridview

我有两个嵌套的APSxGridView对象。内部的DetailRow还包含一个按钮。我想初始化按钮,以便在浏览器中启动新窗口。为此,我需要来自上层GridViews的密钥id。

GridView1
    GridView2
         DetailRow
             Button

我已经知道如何从GridView2获取密钥 - 我的现有代码如下:

protected void btnModify_Init(object sender, EventArgs e)
{
        ASPxButton btn = sender as ASPxButton;
        GridViewDetailRowTemplateContainer clsdetail = btn.Parent as GridViewDetailRowTemplateContainer;

        string partition = "1"; // this should be filled with the GridView1 id
        string cls = clsdetail.KeyValue.ToString(); // this is the GridView2 id

        // The following code just uses the information.
        string panelid = "t" + partition + "-" + cls;

        btn.ClientSideEvents.Click =
            String.Format("function(s, e){{ window.open('producttag.aspx?partition={0}&cls={1}','{2}'); }}",
                partition, cls, panelid);
}

注意从内部网格获取密钥的string cls = ...(按钮位于其详细行内)。

如何获取外部gridview的密钥?我可以通过父母再次这样做吗?或者还有其他方法吗?

更新:可以在内部网格视图中展开多个详细信息行。这样,我无法通过一些隐藏的元素传递id。我需要从上层物体到按钮级别。

1 个答案:

答案 0 :(得分:0)

行。我找到了 - 使用NamingContainer

    ASPxButton btn = sender as ASPxButton;
    GridViewDetailRowTemplateContainer clsdetail = btn.NamingContainer as GridViewDetailRowTemplateContainer;
    Control gvClasses = clsdetail.Grid;  // the grid 2
    Debug.Assert(gvClasses.ClientID.EndsWith("gvClasses"));
    GridViewDetailRowTemplateContainer partitionsdetail = gvClasses.NamingContainer as GridViewDetailRowTemplateContainer;
        // the upper is the detail row of the grid 1

    string partition = partitionsdetail.KeyValue.ToString(); // from grid 1
    string cls = clsdetail.KeyValue.ToString();              // from grid 2