我有两个嵌套的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。我需要从上层物体到按钮级别。
答案 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