0

私はこれに夢中になっており、明らかな何かが欠けていることを望んでいます。

DataGridインメモリにバインドしたい がありますDataTable。AutoGenerateColumns を true に設定すると、フィールドを編集して変更をデータテーブルに反映させることができ、すべてがうまくいきます。問題は、「ステータス」フィールドにドロップダウン コンボボックスが必要だったことです。次に、XAML で列ヘッダーを設定AutoGenerateColumnsfalse、手動で追加しました。これを行うと、フィールドを編集できなくなり、変更が保持されます。代わりに、クリックすると各フィールドが空白になります。デバッグ中に Datagrid 列のステータスを確認したところ、バインディングが null として読み取られていることがわかりました。私が間違ったことのアイデアはありますか?

XAML コード:

<DataGrid Margin="31,29,0,29" Name="dgTickets" RowEditEnding="dgTickets_RowEditEnding" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="ID #" x:Name="ID" />
            <DataGridTextColumn Header="Customer Name" x:Name="CustomerName" />
            <DataGridTextColumn Header="Phone #" x:Name="Phone"/>
            <DataGridComboBoxColumn Header="Status" x:Name="Status"/>
            <DataGridCheckBoxColumn Header="Bool?" x:Name="bool1"/>
            <DataGridCheckBoxColumn Header="Bool?" x:Name="bool2"/>
            <DataGridCheckBoxColumn Header="Bool?" x:Name="bool3"/>
            <DataGridTextColumn Header="Notes" x:Name="Notes"/>
        </DataGrid.Columns>
    </DataGrid>

DataTable を作成して関連付けるための私の C# コード:

    //add columns
        column = new DataColumn("ID", System.Type.GetType("System.String")); //two piece constructor - adds header string and data type
        dbTable.Columns.Add(column); //adds the column to the table

        column = new DataColumn("CustomerName", System.Type.GetType("System.String"));
        dbTable.Columns.Add(column);

        column = new DataColumn("Phone#", System.Type.GetType("System.String"));
        dbTable.Columns.Add(column);

        column = new DataColumn("Status", System.Type.GetType("System.String"));

        dbTable.Columns.Add(column);

        column = new DataColumn("bool1", System.Type.GetType("System.Boolean"));
        dbTable.Columns.Add(column);

        column = new DataColumn("bool2", System.Type.GetType("System.Boolean"));
        dbTable.Columns.Add(column);

        column = new DataColumn("bool3", System.Type.GetType("System.Boolean"));
        dbTable.Columns.Add(column);

        column = new DataColumn("Notes", System.Type.GetType("System.String"));
        dbTable.Columns.Add(column);
        //add rows
        row = dbTable.NewRow(); 

        dbTable.Rows.Add(row); 

        dbTable.AcceptChanges();
        dgTickets.ItemsSource = dbTable.DefaultView;

アドバイスをいただければ幸いです。これら 2 つの要素を連携させるためにいくつかの異なる方法を試しましたが、ヘッダーが手動で定義されている場合、2 つを適切にバインドすることはできないようです。

4

1 に答える 1

1

そこにバインディングを投げるだけでいいと思います。

<DataGridTextColumn Header="Customer Name" x:Name="CustomerName" Binding={Binding path=CustomerName} />
于 2012-05-07T00:05:19.500 に答える