gpt4 book ai didi

c# - 如何获取 DevExpress xtragrid 的所有可见行

转载 作者:太空宇宙 更新时间:2023-11-03 23:28:57 27 4
gpt4 key购买 nike

我有一个带有 GridView 的 DevExpress (14.2) XtraGrid。在一列中,我想显示一个生成起来很复杂的值。所以我正在做这个异步。例如,如果我加载 10000 行,我不想为每一行启动 10000 次异步调用来生成复数值。我认为这会很好,如果只更新可见的行。可见意味着它们实际显示给用户。

这是我到目前为止所尝试的(数据源 = 列表):

if (this._myDataSource != null)
{
foreach (MyObject object in this._myDataSource)
{
int rowHandle = this.myGridView.GetRowHandle(this._myDataSource.IndexOf(object));
var rowState = this.myGridView.IsRowVisible(rowHandle);

switch (rowState) {
case RowVisibleState.Visible:
object.LoadAsyncData;
break;
}
}
}

如果 GridView.Layout 事件触发,我将执行上面的代码。因此,如果用户正在排序或分组,这将被执行。

但是有一些奇怪的行为。有些行在事件触发时似乎不可见。此外,布局事件不会在滚动 GridView 时触发。

enter image description here

最后两行没有加载,但是可见。
有人知道如何处理这个以及如何扩展它以进行滚动吗?

最佳答案

您可以使用未记录的 BaseView.GetViewInfo 方法获取可见行。此方法返回您需要转换为GridViewInfo 类型的BaseViewInfo 类型的对象。之后,您可以使用 GridViewInfo.RowsInfo 属性获取所有可见行。
这是示例:

var info = (GridViewInfo)gridView1.GetViewInfo();

foreach (var rowInfo in info.RowsInfo)
{
int rowHandle = rowInfo.RowHandle;

if (gridView1.IsDataRow(rowHandle))
{
var dataObject = (YourDataClass)gridView1.GetRow(rowHandle);
dataObject.LoadAsyncData;
}
}

对于滚动你可以使用GridView.TopRowChanged事件。

关于c# - 如何获取 DevExpress xtragrid 的所有可见行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32947848/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com