2008-10-08 3 views
5

У меня есть привязка GridView в asp.net 2.0 с ссылкой выбора строки. Когда строка выбрана, я хочу программно добавить строку таблицы под выбранной строкой, чтобы вставить другую сетку и др.Как программно вставить строку в GridView?

Я изучаю это для клиента и для статьи, и я думаю, что мой google-fu сегодня не силен. Какие-либо предложения?

EDIT: У меня на самом деле было рабочее решение, но Visual Studio каким-то образом набросилась; закрытие и повторное открытие VS и восстановление всех исправленных проблем ;-)

Мое решение опубликовано ниже, пожалуйста, сообщите мне, как сделать его лучше, если это возможно. Благодаря!

ответ

8

Думаю, что я понял. Вот решение, которое, похоже, работает. Это можно было бы улучшить с помощью пользовательских элементов управления, но это является его сутью:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow && 
     (e.Row.RowState & 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; 
} 
1

Благодарим за обмен этим кодом.

Я пытаюсь сделать то же самое (создание вложенного gridview), но на самом деле вам не нужно создавать gridview самостоятельно. Вместо этого вы можете просто обернуть элемент управления в теги. Я привел пример здесь http://www.codeproject.com/KB/aspnet/EditNestedGridView.aspx?msg=3089755#xx3089755xx

Вы увидите, что разработчик имеет вложенный элемент управления gv только путем скрещивания второго элемента управления gridview в тегах.

Если вы МОЖЕТЕ делать то, что он делает по коду, это было бы более эффективно. Вам не нужно будет отображать все выбранные поля! Кроме того, вы могли бы визуально иметь некоторые элементы управления, добавленные к вашему дочернему gridview.

Я преобразовал ваш код в vb и отлично работает.

С благодарностью