代码如下,点添加按钮添加数据再刷新数据 当鼠标单击数据表格的单元格时 就会出现"索引 -1 没有值"的错误using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace Test
{
    public partial class Form7 : Form
    {
        public Form7()
        {
            InitializeComponent();
            CnList = new List<CN>();
            this.dataGridView1.DataSource = CnList;//如果将此段代码注释掉就没有问题        }
        class CN
        {
            private string _Name;            public string Name
            {
                get { return _Name; }
                set { _Name = value; }
            }
        }        List<CN> _CnList;        private List<CN> CnList
        {
            get { return _CnList; }
            set { _CnList = value; }
        }        private void button1_Click(object sender, EventArgs e)
        {
            CnList.Add(new CN() { Name = DateTime.Now.ToLongTimeString() });
            //this.dataGridView1.DataSource = null;
            this.dataGridView1.DataSource = CnList;
        }        private void button2_Click(object sender, EventArgs e)
        {
            this.dataGridView1.DataSource = null;
            this.dataGridView1.DataSource = CnList;
        }
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }        #region Windows Form Designer generated code        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.dataGridView1 = new System.Windows.Forms.DataGridView();
            this.button1 = new System.Windows.Forms.Button();
            this.button2 = new System.Windows.Forms.Button();
            ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
            this.SuspendLayout();
            // 
            // dataGridView1
            // 
            this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
            this.dataGridView1.Location = new System.Drawing.Point(12, 59);
            this.dataGridView1.Name = "dataGridView1";
            this.dataGridView1.RowTemplate.Height = 23;
            this.dataGridView1.Size = new System.Drawing.Size(530, 242);
            this.dataGridView1.TabIndex = 0;
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(22, 13);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(75, 23);
            this.button1.TabIndex = 1;
            this.button1.Text = "增加";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // button2
            // 
            this.button2.Location = new System.Drawing.Point(127, 13);
            this.button2.Name = "button2";
            this.button2.Size = new System.Drawing.Size(75, 23);
            this.button2.TabIndex = 3;
            this.button2.Text = "刷新";
            this.button2.UseVisualStyleBackColor = true;
            this.button2.Click += new System.EventHandler(this.button2_Click);
            // 
            // Form7
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(569, 306);
            this.Controls.Add(this.button2);
            this.Controls.Add(this.button1);
            this.Controls.Add(this.dataGridView1);
            this.Name = "Form7";
            this.Text = "Form7";
            ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
            this.ResumeLayout(false);        }        #endregion        private System.Windows.Forms.DataGridView dataGridView1;
        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.Button button2;
    }
}

解决方案 »

  1.   

    public Form7()
            {
                InitializeComponent();
                CnList = new List<CN>();
                //this.dataGridView1.DataSource = CnList;//如果将此段代码注释掉就没有问题        }
    CN 还没有东西啊!!
    不能这样写吧!
      

  2.   

    同意楼上,CnList啥都没有,点击肯定出错啊。
      

  3.   

    不能动不动就.NET Bug实际上大部分都是开发人员自己的问题
      

  4.   

    是单击那个dataGridView1 出的问题 好奇怪!
      

  5.   

    此代码只是测试用的,这个bug 不同于一般的异常不同于其它的, vs.net 2008无法定位到代码具体的出错位置。
    Application.Run(new Test.Form7());//错误被定位到这一行 无法知道错误的位置
      

  6.   

    确实 是BUG解决办法:
     private void button1_Click(object sender, EventArgs e)
            {
               this.BindingContext[dataGridView1.DataSource].SuspendBinding();           CnList.Add(new CN() { Name = DateTime.Now.ToLongTimeString()});          this.dataGridView1.DataSource = null;
                this.dataGridView1.DataSource = CnList;            this.BindingContext[dataGridView1.DataSource].ResumeBinding();        }参考:http://social.msdn.microsoft.com/Forums/zh-CN/winformsdatacontrols/thread/89237586-f644-41e3-b1d4-479c6d6a882e
      

  7.   

    bug  . ms不会让你发现的
      

  8.   


    都是microsoft的错啊~
    去骂比尔盖茨去!!!!!!!!11
      

  9.   

    不是bug,应该是你点击 datagridview上边的 标题 才出的问题,那一行的索引是-1
    你加个判断处理一下就行了
      

  10.   


    用这个方法可以解决,修改后的代码如下:        private void button1_Click(object sender, EventArgs e)
            {
                this.dataGridView1.BindingContext[dataGridView1.DataSource].SuspendBinding();
                CnList.Add(new CN() { Name = DateTime.Now.ToLongTimeString() });
                this.dataGridView1.DataSource = null;
                this.dataGridView1.DataSource = CnList;
                this.dataGridView1.BindingContext[dataGridView1.DataSource].ResumeBinding();
            }