Как программно вставить строку в GridView? - PullRequest
5 голосов
/ 08 октября 2008

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

Я исследую это для клиента и для статьи, и я думаю, что мой гугл-фу сегодня не силен. Есть предложения?

РЕДАКТИРОВАТЬ: на самом деле у меня было рабочее решение, но Visual Studio был как-то сумасшедшим; закрытие и повторное открытие VS и восстановление всего решило проблему; -)

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

Ответы [ 2 ]

8 голосов
/ 08 октября 2008

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

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 голос
/ 24 июня 2009

Спасибо, что поделились этим кодом.

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

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

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

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

Спасибо

...