如何在CellValueNeeded事件处理程序中把单元格类型从DataGridViewCheckBoxCell改为DataGridViewTextBoxCell?[英] How to change cell type from DataGridViewCheckBoxCell to DataGridViewTextBoxCell in CellValueNeeded EventHandler

问题描述

在 VirtualMode=true 的情况下运行 DataGridView.
尝试将单元格类型从 DataGridViewCheckBoxCell 更改为 DataGridViewTextBoxCell 以获取 EventHandler CellValueNeeded 中的特定缓存值.这会导致 UnhandledException.请帮忙!请参阅下面的详细信息.

代码 - - - - - - - - - - - - - - - - - - - - - - - - -----------------------------------------
dgvCell = new DataGridViewTextBoxCell();
dgvCell.Value = string.Empty;
dgvApproval[e.ColumnIndex, e.RowIndex] = dgvCell;


例外 - - - - - - - - - - - - - - - - - - - - - - - - -----------------------
对象引用未设置为对象的实例.

内部异常------------------------------------------------------------------


堆栈跟踪 - - - - - - - - - - - - - - - - - - - - - - - -----------------------
在 System.Windows.Forms.DataGridViewCell.GetEditedFormattedValue(对象值,Int32 rowIndex,DataGridViewCellStyle&dataGridViewCellStyle,DataGridViewDataErrorContexts 上下文)
在 System.Windows.Forms.DataGridViewCell.PaintWork(图形图形,矩形 clipBounds,矩形 cellBounds,Int32 rowIndex,DataGridViewElementStates cellState,DataGridViewCellStyle cellStyle,DataGridViewAdvancedBorderStyle advancedBorderStyle,DataGridViewPaintParts paintParts)
在 System.Windows.Forms.DataGridViewRow.PaintCells(图形图形,矩形 clipBounds,矩形 rowBounds,Int32 rowIndex,DataGridViewElementStates rowState,布尔 isFirstDisplayedRow,布尔 isLastVisibleRow,DataGridViewPaintParts paintParts)
在 System.Windows.Forms.DataGridViewRow.Paint(Graphics graphics, Rectangle clipBounds, Rectangle rowBounds, Int32 rowIndex, DataGridViewElementStates rowState, Boolean isFirstDisplayedRow, Boolean isLastVisibleRow)
在 System.Windows.Forms.DataGridView.PaintRows(Graphics g, Rectangle boundingRect, Rectangle clipRect, Boolean singleHorizo​​ntalBorderAdded)
在 System.Windows.Forms.DataGridView.PaintGrid(图形 g,矩形 gridBounds,矩形 clipRect,布尔 singleVerticalBorderAdded,布尔 singleHorizo​​ntalBorderAdded)
在 System.Windows.Forms.DataGridView.OnPaint(PaintEventArgs e)
在 System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer, Boolean disposeEventArgs)
在 System.Windows.Forms.Control.WmPaint(Message& m)
在 System.Windows.Forms.Control.WndProc(Message& m)
在 System.Windows.Forms.DataGridView.WndProc(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
在 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 原因,ApplicationContext 上下文)
在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 原因,ApplicationContext 上下文)
在 System.Windows.Forms.Application.Run(Form mainForm)
at Approval.Program.Main() in C:\Users\tteelucksingh\Documents\Approval 2010\Approval\Approval\Program.cs:line 41

推荐答案

也许这样并不是所有的相关代码.看起来您正在尝试用空字符串填充所有单元格.首先,它似乎没有意义.此外,您根本不应该创建任何单元格.相反,您应该使用事件参数参数分配 e.Value = String.Empty;.

这很好地展示了完整的事件处理程序.显示将处理程序添加到事件调用列表的位置也很好.如果您使用 Designer 这样做可以找一些借口,但在您发布代码提出问题时却不能.也就是说,创建一个特殊的简短但完全可构建的代码示例只是为了提出问题会更好.它可以帮助您自己找到解决方案.

此外,在询问此类问题之前,请始终使用调试器查看异常是在哪里引发和传播的.它还可以帮助您自己解决问题.

—SA

本文地址:https://www.itbaoku.cn/post/1395212.html

相关标签/搜索