Вопрос

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

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

Редактировать:На самом деле у меня было рабочее решение, но Visual Studio каким-то образом была испорчена;закрытие и повторное открытие VS и перестройка всего устранили проблему ;-)

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

Это было полезно?

Решение

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

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;
}

Другие советы

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

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

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

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

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

Спасибо

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top