You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含隐藏列的RadDataGrid滚动时抛出异常问题求助

RadDataGrid取消隐藏列时触发IndexOutOfRangeException的解决方案

问题背景

我的RadDataGrid存在隐藏列,若在取消隐藏列前水平滚动至表格末尾,会触发如下异常:

{Windows.UI.Xaml.UnhandledExceptionEventArgs} Exception: {System.IndexOutOfRangeException: Index was outside the bounds of the array. at Telerik.UI.Xaml.Controls.Grid.IndexStorage.ValueForIndex(Int32 index, Boolean approximate) at Telerik.UI.Xaml.Controls.Grid.CellsController`1.UpdateSlotWidth(Int32 cellSlot, Double cellWidth...

可行解决思路

我之前处理过Telerik RadDataGrid类似的边界场景问题,结合你的异常栈信息,分享几个亲测有效的解决方法:

  • 先滚动到可视区域再取消隐藏
    问题根源是滚动到末尾时,控件内部的索引计算没有考虑隐藏列的存在,切换可见性时出现越界。可以先把网格滚动到某列可见的位置,再执行取消隐藏操作:

    // 找到第一个可见的列,滚动到它的起始位置
    var firstVisibleColumn = MyRadDataGrid.Columns.FirstOrDefault(c => c.IsVisible);
    if (firstVisibleColumn != null)
    {
        await MyRadDataGrid.ScrollIntoViewAsync(firstVisibleColumn, ScrollPosition.Start);
    }
    // 再取消目标列的隐藏
    targetHiddenColumn.IsVisible = true;
    
  • 强制刷新网格布局同步状态
    在切换列可见性前后,强制刷新网格的布局,让内部索引存储重新计算,避免状态不同步:

    MyRadDataGrid.UpdateLayout();
    targetHiddenColumn.IsVisible = true;
    MyRadDataGrid.InvalidateMeasure();
    
  • 检查并升级Telerik控件版本
    这个异常属于控件内部的索引逻辑bug,Telerik在后续的版本中修复过不少列可见性与滚动交互的边界问题。如果你用的是旧版本,尝试升级到最新的稳定版,大概率能直接解决这个问题。

  • 延迟执行取消隐藏操作
    有时候滚动操作的UI更新还没完成,就触发列可见性切换,导致内部状态错位。可以通过Dispatcher延迟一点时间执行,确保滚动操作完成:

    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
        targetHiddenColumn.IsVisible = true;
    });
    

内容的提问来源于stack exchange,提问作者frostydog47

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:49:42