【发布时间】:2012-11-14 14:10:48
【问题描述】:
我有一个包含 20 列左右的 SDK:DATAGRID,当它打开时只显示四个字段/列。这是我想要的以及我是如何设计的
基本上我是根据用户点击来获取信息 - 示例:
OWNERNAME.Text = ((TextBlock)EPICGrid.Columns[1].GetCellContent(EPICGrid.SelectedItem)).Text;
和/或
OWNERNAME2.Text = ((TextBlock)EPICGrid.Columns[16].GetCellContent(EPICGrid.SelectedItem)).Text;
我遇到的问题不会抓取单元格中的信息,除非我滚动并显示列,因此我只能抓取前 4 列数据,因为它们会在网格变得可见时显示。
我无法从第 5 -20 列中抓取数据,除非我滑过并使这些列可见。在单击期间它们不必可见......似乎在我查看该列之前数据并没有真正加载。
我想我应该说第一条记录/行加载所有数据/单元格/列,我可以从第一条记录中获取任何数据,但问题发生在记录 2 - *。
澄清一下 - 我的问题不是我的列或行的可见性。我的问题是 SDK DataGrid 似乎是按需加载数据。因此,如果该列有时不在视图中,则单元格中的信息不可用。
我不想显示所有列,也不想让用户能够查看所有列,所以我想禁用滚动条,但是当用户点击某一行时,我需要获取信息在某些单元格中,并且由于该列尚未加载,因此信息不存在。
如何关闭按需加载功能?
我进行了搜索,发现有人在加载行时遇到了类似的问题,建议设置VirtualizingStackPanel.VirtualizationMode = Standard
这几乎就像问题源于 VirtualizingStackPanel.VirtualizationMode 但我将此属性设置为标准并回收并且没有运气。
定义如下:
默认情况下,VirtualizingStackPanel 会为 每个可见项目并在不再需要时将其丢弃(例如 当项目滚动出视图时)。当 ItemsControl 包含 很多物品,创建和丢弃物品容器的过程 会对性能产生负面影响。什么时候 VirtualizingStackPanel.VirtualizationMode 设置为 Recycling,即 VirtualizingStackPanel 重用项目容器而不是创建一个 每次都有新的。
在初始加载时,如果单元格不可见,我无法抓取单元格 内容(除非它是第一条记录/行)。一次又一次的细胞/ 列可见,则信息可用。
【问题讨论】:
标签: c# silverlight datagrid ondemand