Pergunta

Eu tenho um gridview databound em asp.net 2.0 com um link de seleção de linha. Quando uma linha é selecionada, quero programaticamente adicionar uma linha da tabela abaixo da linha selecionada, a fim de ninho outra grade et al.

Estou a investigar este para um cliente e para um artigo, e eu acho que o meu google-fu não é forte esta noite. Alguma sugestão?

EDIT: Na verdade, eu tinha uma solução de trabalho, mas Visual Studio foi nutted-se de alguma forma; fechamento e reabertura VS e reconstruir tudo corrigido o problema; -)

A minha solução é postado abaixo, por favor me diga como fazê-lo melhor, se possível. Obrigado!

Foi útil?

Solução

Eu acho que eu percebi isso. Aqui está uma solução que parece funcionar. Pode ser melhorada usando controles de usuário, mas esta é a essência do mesmo:

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

Outras dicas

Obrigado por compartilhar este código.

Eu estou tentando fazer a mesma coisa (criando gridview aninhado), mas, na verdade, você não tem que criar o gridview si mesmo. Em vez disso, você só pode embrulhar o controle dentro de tags. Eu vi um exemplo aqui http: //www.codeproject. com / KB / aspnet / EditNestedGridView.aspx? msg = 3089755 # xx3089755xx

Você iria ver que o desenvolvedor tem controle gv nested apenas por wraping o segundo controle gridview dentro de tags.

Se você pode fazer o que ele está fazendo por código, seria mais pesca. Você não precisa apresentar todos os campos selecionados !! Além disso, você visualmente ser capaz de ter alguns controles adicionado à sua gridview criança.

Eu ter convertido o seu código para VB e funcionando perfeitamente.

Graças

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top