【问题标题】:Datagrid show empty lines even that the datagrid keeps the values即使数据网格保留值,数据网格也会显示空行
【发布时间】:2015-05-19 18:16:57
【问题描述】:

使用 WPF, 我遇到了 datagrid 的数据没有被渲染的问题,我只能看到空行。 (正在插入、调试一些数据。) 即使数据网格保留 dg.ItemsSource 中的值,它仍然显示空行。

XML 代码:

        <DataGrid Name="dg"  Initialized="dg_Initialized" AutoGenerateColumns="False" 
              CanUserResizeRows="False" CanUserAddRows="False" CanUserDeleteRows="False"
              IsReadOnly="True"
              ItemsSource="{Binding}" SelectionMode="Extended">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Name}" Header="Name"/>
            <DataGridTextColumn Binding="{Binding Type}" Header="Type"/>
            <DataGridTextColumn Binding="{Binding InventoryID}" Header="InventoryID"/>
            <DataGridTextColumn Binding="{Binding Location}" Header="Location"/>
            <DataGridCheckBoxColumn Binding="{Binding InStock}" Header="InStock"/>
            <DataGridTextColumn Binding="{Binding StockCount}" Header="StockCount"/>
            <DataGridTextColumn Binding="{Binding Price}" Header="Price"/>

        </DataGrid.Columns>

后端代码:

我正在将每个产品添加到集合中 最后我将集合添加到数据网格项目源。

        data = new ObservableCollection<Product>();
        productsList = bl.FindProductByName(""); // Get List of products
        for (int i = 0; i < productsList.Count; i++)
        {
            if (productsList[i] != null)
                  data.Add(productsList[i]);
        }

        dg.ItemsSource = data;

产品持有:

Name - string
Type - string
InventoryID - Integer
Location - Integer
InStock - Bool
StockCount - Integer
Price - Integer

【问题讨论】:

  • 如我所见,您已关闭列自动生成。您是否手动创建了列?如果有,它们是如何配置的?
  • 您的问题没有包含足够的信息,请提供更多详细信息,例如设置数据的方法或 Aloraman 所说的如何创建列?
  • 是的,我手动创建了列我现在编辑@Aloraman

标签: c# wpf datagrid


【解决方案1】:

重要的是,您显示的所有成员都是公开的,否则他们将不会在网格中可见。如果没有,请尝试为您的属性创建一个公共 get 方法。

编辑:

<DataGrid  Name="DataGrid1" AutoGenerateColumns="False" ">
   <DataGrid.Columns>
      <DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" Width="*"/>
   </DataGrid.Columns>
</DataGrid>

Public class Person {
 private String pm_Name = "";
}

Public String Name { 
  get { return pm_Name; } 
  set { pm_Name = value;} 
}

List<Person> Persons = new List<Persons>();
Persons.Add(new Person() { Name = Sam });
Persons.Add(new Person() { Name = Peter });

DataGrid1.ItemsSource = Persons;

这个例子应该可以工作。所以基本上为了描述它,我在设置到我的网格项目源时使用带有对象的列表。

之后我转到我的 xaml 并在本例中绑定我的 objects 属性的路径'Name'。

如果您想使用可以关注列表对象变化的列表/集合,您可以像已经使用的那样使用 ObservableCollections。

希望这个例子能帮助你追求成功。

【讨论】:

  • 还是不行。相同的结果。网格知道我保存的所有 4 种产品。即使我按产品类型排序,他也会这样做但仍然只显示空单元格@Max Mazur
  • 我将为您创建一个简单的数据网格示例,看看您是否有所有正确的东西。敬请期待:)
  • 我注意到的一件事。您在 xaml 中的 AND 后面的代码中设置了 ItemsSource,也许这可能是麻烦的原因。尝试删除 xaml 部分,因为您已经在后面的代码中完成了它。如果我没记错的话,控件的 ItemsSource 不能设置两次。
  • 我已经按照你的方式改变了我所有的 get set 方法:Public String Name { get { return pm_Name; } set { pm_Name = value;} 及其作品!谢谢sss
猜你喜欢
  • 2018-09-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-19
  • 2013-03-08
  • 1970-01-01
相关资源
最近更新 更多