Прежде всего, из-за жизни cialle asp-страницы. Вы не можете получить доступ к событию в таблице подробностей.
Если вам необходимо получить доступ к детализации таблицы, элементы и т.д ..
Вам нужно добавить метод к PreRender в MasterTableView так:
<MasterTableView DataSourceID="myDataSource"
AllowMultiColumnSorting="True"
DataKeyNames="Key1,Key2,KeyN"
HierarchyDefaultExpanded="True"
OnPreRender="Unnamed_PreRender" >
Метод рекурсивно перебирать через сетку.
Способ, которым вы это делаете, может измениться в зависимости от вашего HieararchyLoadMode.
Так что это мой способ сделать это, самый простой способ существует, если вы находитесь в режиме Client или Serverbind.
Перемещение и режим нагрузки на telerik doc.
Я уверен, что вы не хотите:
«заполнить каждую строку с детальной таблицей по одному вручную»
Вы хотите иметь несколько таблицы на уровне Sub в вашей сетке и отображать программный уровень.
И это может быть сделано в два простых шага:
1 /. Создайте каждую таблицу Detail на странице apsx.
Пожалуйста, обратитесь к этой документации для получения дополнительной информации: Several tables at a level
2 /. Ручка дисплея:
protected void Unnamed_PreRender(object sender, EventArgs e)
{
if (!IsPostBack) myControler(MASTERGRID.MasterTableView);
}
private void myControler(GridTableView gridTableView)
{
GridItem[] nestedViewItems = gridTableView.GetItems(GridItemType.NestedView);
foreach (GridNestedViewItem nestedViewItem in nestedViewItems)
{
foreach (GridTableView nestedView in nestedViewItem.NestedTableViews)
{
if (nestedView.Name == "mytable12" && nestedView.Items.Count == 0)
{ HideExpandColumn(nestedView, nestedView.ParentItem["ExpandColumn"]); }
else if (nestedView.Name == "mytable23")
{
if (nestedView.Items.Count == 0)//
HideExpandColumn(nestedView, nestedView.ParentItem["ExpandColumn"]);
else
{ }
}
if (nestedView.HasDetailTables)
{ myControler(nestedView); }
}
}
}
private void HideExpandColumn(GridTableView _GNVI, TableCell _cell)
{
if (_cell.Controls.Count > 0)
{
_cell.Controls[0].Visible = false;
_cell.Text = " ";
}
_GNVI.Visible = false;
}
Вы можете скрыть таблицу детали с помощью:
HideExpandColumn(nestedView, nestedView.ParentItem["ExpandColumn"]);
Или вы можете скрыть родительскую деталь таблицы вы тестируемая с помощью таблицы детализации, в парах из контроллер:
HideExpandColumn(gridTableView, nestedView.ParentItem["ExpandColumn"]);
HideExpandColumn будет скрывать контроль расширения, которые остаются иногда даже если вы скрываете ю таблицу деталей.
Бонус: Если вам нужно получить доступ к элементу управления в таблице подробностей. Вы можете использовать это:
public static class ControlExtensions
{
public static Control FindIt(this Control control, string id)
{
if (control == null) return null;
Control ctrl = control.FindControl(id);
if (ctrl == null)
{
foreach (Control child in control.Controls)
{
ctrl = FindIt(child, id);
if (ctrl != null) break;
}
}
return ctrl;
}
}
Вызов его в контроллере, как это:
else if (nestedView.Name == "DetailPV")
{
if (nestedView.Items.Count == 0)
HideExpandColumn(gridTableView, nestedView.ParentItem["ExpandColumn"]);
else
{
RadLabel ctrl = (RadLabel)this.FindIt("RadLabel11");
ctrl.Text += "<b>" + nestedView.Items.Count.ToString() + "</b>";
}
Если я не ошибаюсь, при работе с подчиненной таблиц вы не используете NestedTableViews, поскольку это другой инструмент. У вас есть таблицы деталей и вложенные таблицы, которые не могут обращаться друг к другу. Если вы просто хотите добавить gridview к каждой строке, то вам нужен GridTemplateColumn в вашем radgrid, и вы можете заполнить сетку столбцов шаблона из кода позади. Это то, что вы хотели? – Kramb