当双击用于调整大小的行之间的空间时,我们的DataGrid繁重的应用程序喜欢抛出异常。例外情况是
The " DataGridColumnStyle cannot be used because it is not associated with a Property or a Column in the DataSource.
我们大多数基于数据报的表单继承自一个称为GridForm的表单。我们的数据源是一个数据视图。我可以在双击事件处理程序中设置一个断点,但从未到达。在承载控件的整个窗体的Show/ShowDialog调用中捕获except。我们现在运行的是.NET 3.5,但大部分功能都是在.NET 1.1中构建的。我们那时也有同样的问题。
StackOverflow自己的Joel Coehoorn在这里似乎遇到了同样的问题:
http://discuss.fogcreek.com/dotnetquestions/default.asp?cmd=show&ixPost=5780
这是一个我们已经潜伏了3-4年的bug,所以解决这个问题将是惊人的。
完全例外:
它抱怨的DataGridColumnStyle在我们的应用程序中的每个网格之间都不同。我猜这意味着我们有一个列样式,显示一个不在绑定数据集中的列。数据集中包含的列将根据给定表单的需要而更改,因此我们确实需要为可能存在或不存在的列定义一些样式。
System.InvalidOperationException: DataGridColumnStyle of 'Real-Time Bill' cannot be used because it is not associated with a Property or Column in the DataSource.
at System.Windows.Forms.DataGridColumnStyle.CheckValidDataSource(CurrencyManager value)
at System.Windows.Forms.DataGridColumnStyle.GetColumnValueAtRow(CurrencyManager source, Int32 rowNum)
at System.Windows.Forms.DataGridBoolColumn.GetColumnValueAtRow(CurrencyManager lm, Int32 row)
at System.Windows.Forms.DataGrid.RowAutoResize(Int32 row)
at System.Windows.Forms.DataGrid.OnMouseDown(MouseEventArgs e)
at System.Windows.Forms.Control.WmMouseDown(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at CLS.Presentation.MainForm.Main(String[] args) in C:\Users\stuartb.CLS\Documents\Projects\Genesis\CLS.Presentation\MainForm.cs:line 2712
根据要求,这里是相关列的定义。
当然,异常并不总是指示此列。正如我以前的编辑中所指出的,查找未绑定数据表中的列的列样式会导致此问题。在这个例子中,消费账单是
不
在绑定的数据表中。这种情况下的行为只是让列不显示,并且明显地在行边界上崩溃和烧录双击。
this.dataGridBoolColumnClientsConsumptionBill.Alignment = System.Windows.Forms.HorizontalAlignment.Center;
this.dataGridBoolColumnClientsConsumptionBill.AllowNull = false;
this.dataGridBoolColumnClientsConsumptionBill.HeaderText = "Real-Time Bill";
this.dataGridBoolColumnClientsConsumptionBill.MappingName = "ConsumptionBill";
this.dataGridBoolColumnClientsConsumptionBill.Width = 75;