#asp.net #gridview #databound
Вопрос:
у меня есть сетевое представление базы данных в asp.net 2.0 со ссылкой для выбора строк. Когда выбрана строка, я хочу программно добавить строку таблицы под выбранной строкой, чтобы вложить другую сетку и т. Д.
Я исследую это для клиента и для статьи, и я думаю, что мой google-fu сегодня не силен. Есть какие-нибудь предложения?
РЕДАКТИРОВАТЬ: На самом деле у меня было рабочее решение, но Visual Studio каким-то образом завелась; закрытие и повторное открытие VS и перестройка всего исправили проблему 😉
Мое решение опубликовано ниже, пожалуйста, скажите мне, как сделать его лучше, если это возможно. Спасибо!
Ответ №1:
Кажется, я все понял. Вот решение, которое, похоже, работает. Это можно было бы улучшить с помощью пользовательских элементов управления, но в этом вся суть:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow amp;amp;
(e.Row.RowState amp; DataControlRowState.Selected) > 0)
{
Table tbl = (Table)e.Row.Parent;
GridViewRow tr = new GridViewRow(e.Row.RowIndex 1, -1,
DataControlRowType.EmptyDataRow, DataControlRowState.Normal);
TableCell tc = new TableCell();
tc.ColumnSpan = GridView1.Columns.Count;
tc.Controls.Add(
makeChildGrid(Convert.ToInt32(
((DataRowView)e.Row.DataItem)["ROW_ID_FIELD"])));
tr.Cells.Add(tc);
tbl.Rows.Add(tr);
}
}
protected GridView makeChildGrid(int id)
{
GridView gv = new GridView();
SqlDataSource sqlds = new SqlDataSource();
sqlds.DataSourceMode = SqlDataSourceMode.DataSet;
sqlds.ConnectionString = SqlDataSource1.ConnectionString;
sqlds.SelectCommand = "SELECT * from MY_TABLE_NAME "
"WHERE KEY_FIELD = " id.ToString();
DataView dv = (DataView)sqlds.Select(DataSourceSelectArguments.Empty);
gv.DataSource = dv;
gv.DataBind(); //not sure this is necessary...?
return gv;
}
Ответ №2:
Спасибо, что поделились этим кодом.
Я пытаюсь сделать то же самое (создание вложенного представления сетки), но на самом деле вам не нужно создавать представление сетки самостоятельно. Вместо этого вы просто можете обернуть элемент управления в теги. Я видел здесь пример http://www.codeproject.com/KB/aspnet/EditNestedGridView.aspx?msg=3089755#xx3089755xx
Вы увидите, что разработчик вложил элемент управления gv, просто обернув второй элемент управления gridview в теги.
Если бы вы МОГЛИ делать то, что он делает, с помощью кода, это было бы более эффективно. Вам не нужно будет отображать все выбранные поля!! Кроме того, вы визуально сможете добавить некоторые элементы управления в свой дочерний вид сетки.
Я преобразовал ваш код в vb и отлично работаю.
Спасибо