`
isiqi
  • 浏览: 16624265 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

DataGridView绑定Ilist对象,出现IndexOutOfRangeException错误的解决方法

阅读更多

DataGridView绑定Ilist对象,出现IndexOutOfRangeException错误的解决方法

我是这样绑定DataGridVeiw的:

IList<resource> resources = new List<resource>();<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">Resource resource = new Resource();<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">resources.Add(resource);<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">dataGridView.DataSource = resources; <p> 在第一个模块中能正常使用,没有任何问题。但到了第二个模块,同样的语句,只要一点击DataGridView控件,马上就会跳出System.IndexOutOfRangeException异常,具体内容如下: </p> <p><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">未处理 System.IndexOutOfRangeException<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> Message="索引 -1 没有值。"<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> Source="System.Windows.Forms"<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> StackTrace:<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 System.Windows.Forms.CurrencyManager.get_Item(Int32 index)<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 System.Windows.Forms.CurrencyManager.get_Current()<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 System.Windows.Forms.DataGridView.DataGridViewDataConnection.OnRowEnter(DataGridViewCellEventArgs e)<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 System.Windows.Forms.DataGridView.OnRowEnter(DataGridViewCell&amp; dataGridViewCell, Int32 columnIndex, Int32 rowIndex, Boolean canCreateNewRow, Boolean validationFailureOccurred)<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 System.Windows.Forms.DataGridView.SetCurrentCellAddressCore(Int32 columnIndex, Int32 rowIndex, Boolean setAnchorCellAddress, Boolean validateCurrentCell, Boolean throughMouseClick)<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 System.Windows.Forms.DataGridView.OnCellMouseDown(HitTestInfo hti, Boolean isShiftDown, Boolean isControlDown)<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 System.Windows.Forms.DataGridView.OnCellMouseDown(DataGridViewCellMouseEventArgs e)<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 System.Windows.Forms.DataGridView.OnMouseDown(MouseEventArgs e)<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 System.Windows.Forms.Control.WmMouseDown(Message&amp; m, MouseButtons button, Int32 clicks)<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 System.Windows.Forms.Control.WndProc(Message&amp; m)<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 System.Windows.Forms.DataGridView.WndProc(Message&amp; m)<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&amp; m)<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&amp; m)<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG&amp; msg)<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 System.Windows.Forms.Application.Run(Form mainForm)<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 KoalaStudio.ksRBAC.PrivilegeConfigTool.Program.Main()<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 System.Threading.ThreadHelper.ThreadStart_Context(Object state)<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"> 在 System.Threading.ThreadHelper.ThreadStart()<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"></p> <p> 而且比较可恶的是,抛出异常的地方竟然是在Program.cs里,指向 </p> <p><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">Application.Run(new FrmMain()); </p> <p> 这让人怎么调试,试了N回,也没发现原因。<br> 于是上网找了找,竟然真有解决的方法,其作者也并未解决这个问题,而是采取了折衷的方法,用了一个过渡组件来解决: </p> <p><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">BindingSource bindingSource = new BindingSource();<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">bindingSource.DataSource = resources;<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">dgvResource.DataSource = bindingSource; </p> <p> 问题可以解决,但又有了新的问题,因为使用了BindingSource,因此对与DataGridView的更改并不能同步到Ilist<resource>对象上,所以还是不能用这种方法,继续研究。<br> 上国外的网站看了看,终于找到了问题的原因,在向DataGridView绑定Ilist<t>类型的对象是,如果对象的成员为0,那么就会出现<br>此问题。而且即使重新绑定DataGridView的数据源,也会继续存在此问题,解决的方法就是在向DataGridView绑定Ilist<t>对象是,要保证其中至少有一个成员,否则宁可不绑定(虽然不是最完美的解决方法)。<br> 其实最好的方法,是用BindingList<t>对象代替Ilist<t>对象作为DataGridView的数据源,即可彻底解决此问题,而且能实现DataGridView修改时与数据源的自动更新。但现在没有时间,只能先这样用了。</t></t></t></t></resource></p></resource></resource>

DataGridView绑定Ilist对象,出现IndexOutOfRangeException错误的解决方法 - 笨笨的熊窝 - 博客园

分享到:
评论

相关推荐

    DataGridView 绑定IList 实现排序控件

    DataGridView 绑定IList 实现排序控件 使用方法: IList&lt;Model&gt; aaa = new List(); aaa = Getr(); dataGridView1.DataSource = new ZiZhuDi.IListdataGridViewSort.BindingCollection(aaa);

    c# winform datagridview 绑定集合中对象属性

    本资源主要讲解如何将集合中的对象属性绑定到`DataGridView`,从而实现数据的动态显示。 首先,我们需要创建一个包含属性的对象类。例如,我们可以定义一个名为`Student`的类,包含`Id`、`Name`和`Age`等属性: ``...

    (c#)DataGridView绑定内嵌有对象的对象

    标题中提到的"aaa.bbb"绑定方法,这里的"aaa"可能代表`Person`对象,"bbb"则代表`Address`对象的一个属性,如`City`。使用点号`.`作为分隔符来指定数据路径,`DataGridView`会尝试解析这个路径,并将数据源中的相应...

    C# datagridview 绑定数据后绑定标题

    当我们谈论“C# datagridview 绑定数据后绑定标题”,这意味着我们需要将数据源与`DataGridView`关联,并自定义列头显示。 首先,让我们了解如何绑定数据到`DataGridView`。数据可以来自各种来源,例如数据库、数组...

    c#使用bindlist绑定datagridview不能自动排序的解决类

    ### C# 使用 `BindableList` 绑定 `DataGridView` 无法自动排序的解决方案 #### 概述 在C#开发中,使用`DataGridView`控件展示数据是非常常见的做法。为了提高开发效率,我们通常会使用`BindingList&lt;T&gt;`来绑定数据...

    DataGridView点绑定List击列头排序

    在这个示例中,`dataGridView1`是`DataGridView`的实例,`dataGridView1.DataSource`应设置为你的`List&lt;T&gt;`对象。当用户点击列头时,`ColumnHeaderMouseClick`事件被触发,然后根据当前列的排序状态(通过检查字体...

    c# DataGridView 导出数据到sql中出现错误“未将对象引用设置到对象实例中”

    3. 解决错误的方法:将 DataGridView 的 AllowUserToAddRows 属性的值设置为 false,以避免添加空行。 相关技术: 1. C#:C# 是一种现代的、面向对象的编程语言,广泛应用于 Windows 应用程序开发。 2. ...

    c#实现datagridview绑定到数据库的图像点击时显示在picturebox中

    2. **加载数据到DataGridView**:创建一个SqlCommand对象查询`Images`表,并将结果填充到一个DataTable中,然后将DataTable绑定到DataGridView。 ```csharp SqlCommand command = new SqlCommand("SELECT ID, Name,...

    dataGridView动态绑定数据下拉框

    6. **错误处理和用户体验**:确保有适当的错误处理机制,例如检查文件是否有效,数据库连接是否成功,以及导入过程中可能出现的数据一致性问题。同时,提供清晰的用户反馈,如进度条、提示信息等,提高用户体验。 ...

    datagridview的数据绑定

    本教程将深入探讨如何在C#中对`DataGridView`进行数据绑定,以及如何处理数据的修改和更新。 首先,我们要理解数据绑定的基本概念。数据绑定是指将控件(如`DataGridView`)连接到数据源的过程,使得控件能够自动...

    DataGridView数据源绑定

    本篇将详细介绍 `DataGridView` 的数据源绑定方法及其相关操作,包括数据的添加、删除、修改等。 #### 一、DataGridView概述 `DataGridView` 是一个用于展示数据的表格控件,它可以绑定到多种数据源,并且能够自动...

    C# datagridview 与数据源绑定后对数据的,增加,删除,插入,更新

    首先,我们需要创建一个数据源,这可以是任何实现了`IList`或`IBindingList`接口的对象,如DataTable、BindingList、ArrayList等。例如,我们可以创建一个DataTable并填充数据,然后将其绑定到DataGridView: ```...

    C#实现绑定DataGridView与TextBox之间关联的方法

    总之,C#实现`DataGridView`与`TextBox`之间的关联,主要依赖于数据绑定机制,通过`DataSet`、`DataTable`和`CurrencyManager`对象,以及`DataBindings.Add`方法,可以轻松实现数据源与界面控件间的双向同步。...

    datagridview 按钮列 绑定事件触发

    要在DataGridView中添加按钮列,首先需要在设计时或运行时创建一个DataGridViewTextBoxColumn对象,然后将其设置为DataGridViewButtonColumn类型。例如: ```csharp DataGridViewButtonColumn buttonColumn = ...

    DataGridView数据绑定及常用方法

    本文将深入探讨`DataGridView`控件的数据绑定方法及其常用属性、方法和事件,通过具体实例帮助您理解和应用。 ### 1. 数据绑定 `DataGridView`控件可以通过数据绑定技术与各种数据源进行连接,包括数组、集合、...

    c#DataGridView数据绑定示例 多列混合排序

    在提供的压缩包中,`DataGridView.sln`是解决方案文件,`DataGridView.suo`是Visual Studio的用户选项文件,通常包含用户特定的设置,而`DataGridView`可能是项目的主要代码文件,里面应该包含了上述功能的实现。...

    C# WinForm (DataGridViewComboBoxColumn 绑定)自己写的,最简单实例

    在这个最简单的实例中,我们将深入探讨如何在`DataGridView`中绑定`DataGridViewComboBoxColumn`,以及实现这一功能的关键步骤。 1. **创建WinForm项目** 首先,你需要在Visual Studio中创建一个新的C# Windows ...

    C# Datagridview绑定List方法代码

    当我们的数据存储在List对象中时,将这个List绑定到DataGridView是一种常见且高效的操作方式。本文将深入探讨如何使用C#实现Datagridview与List的绑定,并提供相关的代码实例。 首先,我们需要创建一个包含数据的类...

    datagridview中绑定combox.zip

    在本例中,“datagridview中绑定combox.zip”提供的简单实例展示了如何在`DataGridView`的某一列中嵌入`ComboBox`,让用户在该列中进行下拉选择。 首先,我们需要理解`DataGridView`的列类型。`DataGridView`支持...

Global site tag (gtag.js) - Google Analytics