2014-11-18 3 views
0

У меня есть два вложенных объекта APSxGridView. В DetailRow во внутреннем содержится также кнопка. Я хочу инициализировать кнопку так, чтобы она запускала новое окно в браузере. Для этого мне нужен идентификатор ключа из верхнего GridView.Кнопка в DetailRow нужны ключи от двух верхних вложенных APSxGridViews

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 = ..., который получает ключ от внутренней сетки (кнопка находится внутри его подробно).

Как я могу получить ключ для внешнего вида сетки? Могу ли я сделать это через родителей снова? Или есть другой способ?

Обновление: Более чем одна подробная строка может быть расширена во внутреннем виде сетки. Таким образом, я не могу передать идентификатор через какой-то скрытый элемент. Мне нужно, чтобы он находился на уровне кнопок с верхних объектов.

ответ

0

OK. Я нашел это - используйте 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 

 Смежные вопросы

  • Нет связанных вопросов^_^