私はこれに夢中になっており、明らかな何かが欠けていることを望んでいます。
DataGrid
インメモリにバインドしたい がありますDataTable
。AutoGenerateColumns を true に設定すると、フィールドを編集して変更をデータテーブルに反映させることができ、すべてがうまくいきます。問題は、「ステータス」フィールドにドロップダウン コンボボックスが必要だったことです。次に、XAML で列ヘッダーを設定AutoGenerateColumns
しfalse
、手動で追加しました。これを行うと、フィールドを編集できなくなり、変更が保持されます。代わりに、クリックすると各フィールドが空白になります。デバッグ中に 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 つを適切にバインドすることはできないようです。