首页 > 解决方案 > 在 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);
      }

标签: c#wpfdatagrid

解决方案


Daekning 是 Bladdaeknik 的集合。

因此,每一行的数据上下文都是 Bladdaeknik 之一。

当您追加时,这也是正确的。将创建其中一个 Bladdaeknik 的新实例。

新行中该组合的数据上下文是您的新 Bladdaeknik。

如果您希望某些 TblPostNrs 显示为选项,那么您需要在 Bladdaeknik 的构造函数中为新实例设置它们。对于您正在编辑的那些,您可以使用它或将它们替换为其他一些,因为您可以将数据从数据库转换到该视图模型。

或者使用资源或相关资源或其他类似资源绑定到其他地方的集合,以便为所有行提供一个列表。

根据你的要求。

 public class Bladdaeknik
 {
     public Bladdaeknik()
     {
         // Fill this.TblPostNrs with data
     }

(抱歉,如果我在那里拼错了任何东西)。


推荐阅读