c# - 在 DataGrid 的编辑/创建模式下,下拉框为空
问题描述
我有这个数据网格,并且在有数据的行中,组合框中也有数据,但是当我想添加新行时,组合框为空。有什么办法可以绕过它,以便当我在数据网格中添加新行时有数据?
<DataGrid x:Name="po" ItemsSource="{Binding dækning}" Grid.Column="9" Grid.Row="1" Grid.RowSpan="3"
Grid.ColumnSpan="3" AutoGenerateColumns="False" AddingNewItem="Bladdaeking_AddingNewItem"
CellEditEnding="Bladdaeking_CellEditEnding">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Post nr">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Postby}"></TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate >
<ComboBox ItemsSource="{Binding TblPostNrs}"
DisplayMemberPath="PostNr" ></ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Dækning">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding DaekningsGrad1}"></TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Post by">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Postby}"></TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Oplag">
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
这是 DataGrid 接受的对象
public class Bladdaeknik
{
private int BladID;
private int Oplag;
private int DaekningsGrad;
private int PostNr;
private string postby;
public int DaekningsGrad1 { get => DaekningsGrad; set => DaekningsGrad = value; }
public int PostNr1 { get => PostNr; set => PostNr = value; }
public int Oplag1 { get => Oplag; set => Oplag = value; }
public int BladID1 { get => BladID; set => BladID = value; }
public string Postby { get => postby; set => postby = value; }
public List<daos.PostNrModel> TblPostNrs { get; set; }
}
以及 *.xaml.cs 页面中的代码
private void AddBladDaeknignToDataGrid(int stamBladid)
{
var res = BladDækningDao.GetDækningGradByBladId(stamBladid);
res.Add(new Bladdaeknik() {
BladID1 = stamBlad.BladID
});
po.DataContext = new { dækning = res };
da.DataSource = BladDækningDao.GetDækningGradByBladId(stamBladid);
}
解决方案
Daekning 是 Bladdaeknik 的集合。
因此,每一行的数据上下文都是 Bladdaeknik 之一。
当您追加时,这也是正确的。将创建其中一个 Bladdaeknik 的新实例。
新行中该组合的数据上下文是您的新 Bladdaeknik。
如果您希望某些 TblPostNrs 显示为选项,那么您需要在 Bladdaeknik 的构造函数中为新实例设置它们。对于您正在编辑的那些,您可以使用它或将它们替换为其他一些,因为您可以将数据从数据库转换到该视图模型。
或者使用资源或相关资源或其他类似资源绑定到其他地方的集合,以便为所有行提供一个列表。
根据你的要求。
public class Bladdaeknik
{
public Bladdaeknik()
{
// Fill this.TblPostNrs with data
}
(抱歉,如果我在那里拼错了任何东西)。
推荐阅读
- json - 使用 React 或其他前端 JS 库的 Django REST Framework 节流/授权
- javascript - 使具有匹配属性的对象加入数组
- css - 如何使用css选择表中的前2个元素
- javascript - JS:如何过滤对象属性并成为关键
- amazon-s3 - AWS APIGateway“缺少身份验证令牌”
- html - 无法弄清楚为什么下拉菜单不会与上述文本输入框对齐
- spring - SpringBoot web应用启动后如何按需创建web应用上下文
- python - 无法在python中使用OAEP解密
- coq - 我可以以某种方式堆叠隐式类型吗?
- mysql - 添加连接池后代码运行顺序错误(需要异步/等待?)