6

データグリッドにデータを追加しようとしています (実際、グリッドにデータを表示するコントロールはすべて実行できます) が、列 (名前と番号の両方) は実行時までわかりません。

私が作成する方法を知っている列:例

DataGridTextColumn textColumn = new DataGridTextColumn();
textColumn.Header = column.DisplayName;
MyDataGrid.Columns.Add(textColumn);

しかし、どうすれば行を追加できますか? データが既知のプロパティを持つオブジェクトに含まれていないため、バインディングを使用する方法がわかりません。たとえば、各行のデータは string[] として入力される場合があります。したがって、あるときは 3 つの列があり、別のときは 5 つあるかもしれません。

私は次のようなことができると期待していました:

// Example data to represent a single row.
string[] row1 = new[] { "value1", "value2", "value3" };

var row = new Row;
row.AddCell(row1[0]);
row.AddCell(row1[1]);
row.AddCell(row1[2]);
MyDataGrid.Rows.Add(row);
4

2 に答える 2

13

正確なコードを理解するには、VSにプラグインする必要がありますが、ほとんどの場合、列を作成し、列キーをバインディング式として使用して、インデックス付きバインディングがWPFで機能することを確認できます。

すぐにいくつかのコードを取得します-しかし、それはあなたの行作成コードのように見えますが、列のバインディングは次のようになります(おそらく間違ったメソッド名を許してください)

textColumn.Bindings.Add(new Binding("this[" + columnIndex.ToString() + "]"));

アップデート:

ええ、これがあなたが探しているものであるかどうかはわかりませんが、それは機能します:

データグリッドを含む単一のウィンドウを作成しました(dataGrid1)

 public MainWindow()
    {
        InitializeComponent();

        var col = new DataGridTextColumn();
        col.Header = "Column1";
        col.Binding = new Binding("[0]");
        dataGrid1.Columns.Add(col);

        col = new DataGridTextColumn();
        col.Header = "Column2";
        col.Binding = new Binding("[1]");
        dataGrid1.Columns.Add(col);

        col = new DataGridTextColumn();
        col.Header = "Column3";
        col.Binding = new Binding("[2]");
        dataGrid1.Columns.Add(col);

        //dataGrid1.ad

        List<object> rows = new List<object>();
        string[] value;

        value = new string[3];

        value[0] = "hello";
        value[1] = "world";
        value[2] = "the end";
        rows.Add(value);

        dataGrid1.ItemsSource = rows;
    }

例

于 2012-05-18T10:40:08.620 に答える
-1

データグリッドであまり遊んだことはありませんが、このようなことを試すことができます

int currentRow = MyDataGrid.Rows.Add();

MyDataGrid.Rows[currentRow].Cells[0].Value = row1[0];  
MyDataGrid.Rows[currentRow].Cells[1].Value = row1[1];
MyDataGrid.Rows[currentRow].Cells[2].Value = row1[2];
于 2012-05-18T10:38:46.350 に答える