5

行選択リンクを備えたasp.net2.0のデータバインドされたGridViewがあります。行が選択されたら、別のグリッドなどをネストするために、選択した行の下にテーブル行をプログラムで追加したいと思います。

私はクライアントと記事のためにこれを研究しています、そして私は私のグーグルフーが今夜強くないと思います。助言がありますか?

編集:私は実際に実用的な解決策を持っていましたが、VisualStudioはどういうわけかおかしくなりました。VSを閉じて再度開き、すべてを再構築すると問題が修正されました;-)

私の解決策は以下に掲載されています。可能であればそれを改善する方法を教えてください。ありがとう!

4

2 に答える 2

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;
}
于 2008-10-08T02:52:08.337 に答える
1

このコードを共有していただきありがとうございます。

同じこと(ネストされたグリッドビューの作成)を試みていますが、実際には、グリッドビューを自分で作成する必要はありません。代わりに、コントロールをタグ内でラップすることができます。ここで例を見ましたhttp://www.codeproject.com/KB/aspnet/EditNestedGridView.aspx?msg=3089755#xx3089755xx

2番目のgridviewコントロールをタグでラップするだけで、開発者がgvコントロールをネストしていることがわかります。

彼がしていることをコードで実行できれば、より効率的になります。選択したすべてのフィールドを表示する必要はありません!! さらに、子グリッドビューにいくつかのコントロールを視覚的に追加することができます。

私はあなたのコードをvbに変換し、完全に機能しています。

ありがとう

于 2009-06-24T05:27:31.957 に答える