2

でExcelのようなテーブルを動的に作成したいのですが、いくつかの列datagridviewに設定するオプションが必要です。colspan

アイデアはデータを表示することだけです。ユーザーは何も入力しませんが、表/スプレッドシートの外観にする必要があります。datagridview持つことができない場合colspan、他のタイプのテーブルのようなツールがありcolspanますか?

一方、列はデータベースクエリの結果から動的に作成されます。

Windowsフォームを使用しています。

何か案は?

4

1 に答える 1

5

TableLayoutPanel.SetColumnSpan Methodを持つTableLayoutPanel Classを見てください。

以下は、2 列のテキスト ボックスの 1 つにまたがるコード サンプルです。

var dt = new DataTable();
dt.Columns.Add("Id");
dt.Columns.Add("Value1");
dt.Columns.Add("Value2");

dt.Rows.Add(1, "aa", "xx");
dt.Rows.Add(2, "bb","yy");
dt.Rows.Add(3, "cc", "zz");
tableLayoutPanel1.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
tableLayoutPanel1.ColumnCount = 4;
tableLayoutPanel1.AutoSize = true;
for (int i = 0; i < dt.Columns.Count; i++)
{
    var l = new Label();
    l.Dock = DockStyle.Fill;
    l.Text = dt.Columns[i].ColumnName;
    tableLayoutPanel1.Controls.Add(l, i, 0);
}
var emptyLabel = new Label();
emptyLabel.Text = "Empty label";
tableLayoutPanel1.Controls.Add(emptyLabel, 4, 0);
for (int i = 0; i < dt.Rows.Count; i++)
{
    for (int j = 0; j < dt.Rows[i].ItemArray.Length; j++)
    {
        var tb = new TextBox();
        tb.Multiline = true;
        tb.Dock = DockStyle.Fill;
        tb.Text = dt.Rows[i][j].ToString();
        tableLayoutPanel1.Controls.Add(tb, j, i+1);
        if (i == 1 && j == 2)
            tableLayoutPanel1.SetColumnSpan(tb, 2);
    }
}
于 2013-07-08T11:39:23.647 に答える