我有一個名爲「myResults」的列表。當列表包含至少一個項目時,我正在嘗試爲列表填充GridView w/info; GridView被稱爲「gvMyResults」。但是,有時候,在DataSource的這次更新過程中,我得到一個異常說:「鎖定時邊界不能改變」,並且在我的GridView中顯示一個紅色的X.我在我的更新中添加了這個Dispatcher包裝器,但我仍然看到相同的錯誤。這很難排除故障,因爲它不會每次都發生。另外,這個GridView是一個Telerik RadGridView。GridView更新時出現「鎖定時無法更改邊界」
有誰知道如何阻止「邊界鎖定時無法更改」錯誤?
if (myResults.Count > 0)
{
Dispatcher.CurrentDispatcher.Invoke(
DispatcherPriority.Normal,
(Action)delegate()
{
this.gvMyResults.DataSource = myResults;
});
}
我已經試過這爲好,但我得到了同樣的異常:
_Context.Send(x =>
{
this.gvMyResults.DataSource = myResults;
}, null);
異常/棧跟蹤(的要求):
Type=System.InvalidOperationException
Source=Telerik.WinControls
Message=Bounds cannot be changed while locked.
StackTrace:
at Telerik.WinControls.RadElement.SetBoundsCore(Rectangle bounds)
at Telerik.WinControls.RadElement.set_Size(Size value)
at Telerik.WinControls.RadElement.SetLayoutParams(PointF newOffset, SizeF newSize)
at Telerik.WinControls.RadElement.ArrangeCore(RectangleF finalRect)
at Telerik.WinControls.RadElement.Arrange(RectangleF finalRect)
at Telerik.WinControls.UI.RowsContainerElement.ArrangeOverride(SizeF finalSize)
at Telerik.WinControls.RadElement.ArrangeCore(RectangleF finalRect)
at Telerik.WinControls.RadElement.Arrange(RectangleF finalRect)
at Telerik.WinControls.UI.ScrollViewElement`1.ArrangeViewElement(RectangleF viewElementRect)
at Telerik.WinControls.UI.ScrollViewElement`1.ArrangeOverride(SizeF finalSize)
at Telerik.WinControls.RadElement.ArrangeCore(RectangleF finalRect)
at Telerik.WinControls.RadElement.Arrange(RectangleF finalRect)
at Telerik.WinControls.Layouts.ContextLayoutManager.UpdateLayout()
at Telerik.WinControls.RadElement.UpdateLayout()
at Telerik.WinControls.UI.GridVisibilityHelper.EnsureRowVisible(GridViewRowInfo rowInfo)
at Telerik.WinControls.UI.GridTableElement.EnsureRowVisible(GridViewRowInfo rowInfo)
at Telerik.WinControls.UI.GridTableElement.EnsureCellVisible(GridViewRowInfo rowInfo, GridViewColumn column)
at Telerik.WinControls.UI.GridTableElement.UpdateViewCore(Object sender, DataViewChangedEventArgs args)
at Telerik.WinControls.UI.GridTableElement.UpdateView(Object sender, DataViewChangedEventArgs args)
at Telerik.WinControls.UI.GridTableElement.ProcessTemplateEvent(GridViewEvent eventData)
at Telerik.WinControls.UI.GridTableElement.Telerik.WinControls.UI.IGridViewEventListener.ProcessEvent(GridViewEvent eventData)
at Telerik.WinControls.UI.GridViewEventProcessEntity.ProcessCollection(GridViewEvent gridEvent, PriorityWeakReferenceList list, GridEventProcessMode processMode)
at Telerik.WinControls.UI.GridViewEventProcessEntity.ProcessEvent(GridViewEvent gridEvent)
at Telerik.WinControls.UI.GridViewSynchronizationService.NotifyListeners(GridViewEvent gridEvent)
at Telerik.WinControls.UI.GridViewSynchronizationService.FlushEvents()
at Telerik.WinControls.UI.GridViewSynchronizationService.DispatchEvent(GridViewEvent gridEvent)
at Telerik.WinControls.UI.GridViewSynchronizationService.RaiseCurrentChanged(GridViewTemplate template, GridViewRowInfo row, GridViewColumn column, Boolean user)
at Telerik.WinControls.UI.GridViewTemplate.CollectionView_CurrentChanged(Object sender, EventArgs e)
at System.EventHandler.Invoke(Object sender, EventArgs e)
at Telerik.WinControls.Data.RadCollectionView`1.OnCurrentChanged(EventArgs args)
at Telerik.WinControls.Data.RadCollectionView`1.SetCurrentPositionCore(Int32 newPosition, Boolean forceNotify, CurrentChangeReason reason)
at Telerik.WinControls.Data.RadDataView`1.SyncCurrent(TDataItem item)
at Telerik.WinControls.Data.RadDataView`1.RebuildData(Boolean notify)
at Telerik.WinControls.Data.RadDataView`1.RefreshOverride()
at Telerik.WinControls.Data.RadDataView`1.ProcessCollectionChanged(NotifyCollectionChangedEventArgs args)
at Telerik.WinControls.Data.RadCollectionView`1.source_CollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
at Telerik.WinControls.Data.NotifyCollectionChangedEventHandler.Invoke(Object sender, NotifyCollectionChangedEventArgs e)
at Telerik.WinControls.Data.RadListSource`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
at Telerik.WinControls.Data.RadListSource`1.EndUpdate(Boolean notifyUpdates)
at Telerik.WinControls.Data.RadListSource`1.Initialize()
at Telerik.WinControls.Data.RadListSource`1.Bind(Object dataSource, String dataMember)
at Telerik.WinControls.Data.RadListSource`1.set_DataSource(Object value)
at Telerik.WinControls.UI.GridViewTemplate.set_DataSource(Object value)
at Telerik.WinControls.UI.RadGridView.set_DataSource(Object value)
at MyProject.MyWindow.<>c__DisplayClass2.<DisplayCallerInfo>b__0()
我們對Telerik的論壇上張貼的,但還沒有聽說過任何事情 - [鏈接](http://www.telerik.com/community/forums/winforms/gridview/bounds - 無法更改,而鎖定在gridview-update.aspx) – WEFX
堆棧跟蹤呢? –
@KingKing - 我已經添加了堆棧跟蹤。謝謝 – WEFX