我得到了应用程序异常
at System.Windows.Forms.CurrencyManager.get_Item(Int32 index)
at System.Windows.Forms.CurrencyManager.get_Current()
at System.Windows.Forms.DataGridView.DataGridViewDataConnection.OnRowEnter(DataGridViewCellEventArgs e)
at System.Windows.Forms.DataGridView.OnRowEnter(DataGridViewCell& dataGridViewCell, Int32 columnIndex, Int32 rowIndex, Boolean canCreateNewRow, Boolean validationFailureOccurred)
at System.Windows.Forms.DataGridView.SetCurrentCellAddressCore(Int32 columnIndex, Int32 rowIndex, Boolean setAnchorCellAddress, Boolean validateCurrentCell, Boolean throughMouseClick)
at System.Windows.Forms.DataGridView.OnCellMouseDown(HitTestInfo hti, Boolean isShiftDown, Boolean isControlDown)
at System.Windows.Forms.DataGridView.OnCellMouseDown(DataGridViewCellMouseEventArgs e)
at System.Windows.Forms.DataGridView.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.DataGridView.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(IntPtr 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 MedForms.Program.Main() in F:\Projects\Vstu\MedForms\MedForms\Program.cs:line 18
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
每次我尝试点击DataGridView时。
我收到错误消息
{“索引-1没有值。”} (SystemIndexOutOfaRange异常)。
在行
Application.Run(new MainForm());
我无法调试它。请帮助我找出可能导致此类问题的原因以及如何进行调试?
答案 0 :(得分:19)
我猜你已经将最初为空的List(或其他不会生成列表更改事件的集合)绑定到DataGridView
,然后将项添加到此列表中。
您添加的项目会在网格上正确 显示 ,但点击某行会导致此异常。这是因为基础CurrencyManager
将其当前行位置报告为-1的偏移量。它将保持这种状态,因为List不会报告对网格的更改。
如果列表中包含一些项目,您应该只将列表绑定到网格,或者在添加它们时重新绑定。
另请参阅我对this问题的回答,这基本上是同一个问题。
答案 1 :(得分:0)
按照安迪的建议,我取代了
private List<Employee> Employees { get; set; } = new List<Employee>();
_employeesGridView.DataSource = Employees;
带
private BindingList<Employee> Employees { get; set; } = new BindingList<Employee>();
_employeesGridView.DataSource = Employees;
问题就消失了。
答案 2 :(得分:0)
经过大量的努力,我已经解决了这个问题。绑定DataGridView当数据源中有一些数据时,它可以是列表或DataTable。