我一直在为此疯狂,我希望我只是遗漏了一些明显的东西。
我有DataGrid
我要绑定到内存中DataTable
。将AutoGenerateColumns设置为true,我可以编辑字段并将更改传播到数据表,一切都很棒。问题是我想在“状态”字段中使用下拉式组合框。然后,我将AutoGenerateColumns
设置为false
,并在XAML中手动添加列标题。当我这样做时,我不能再编辑字段并保持更改,而是在我点击之后每个字段都是空白的。我在调试期间检查了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;
任何建议表示赞赏。我尝试了几种不同的方法让这两个元素一起工作,但如果手动定义了标题,我似乎无法正确绑定两个。
答案 0 :(得分:1)
我认为你只需要在那里抛出绑定,例如:
<DataGridTextColumn Header="Customer Name" x:Name="CustomerName" Binding={Binding path=CustomerName} />