datagridview的屬性欄中的AllowUserToAddRows默認為true時,datagridview面板在你添加的行數下面都會默認多1行,如果你不希望看到它,那麼就把AllowUserToAddRows設置為False,LZ不妨試試看

解决方案 »

  1.   

    DataTable mydt = (DataTable)dataGridView1.DataSource;
    mydt.Rows.Add(mydt.NewRow());
    楼主代码是在事件中吧,会不会是在添加新行过程中触发了事件,结果又添加了,而这种情况,不只两行了,会无穷多
    楼主可以在试试这样
    DataTable mydt=new DataTable();
    mydt=……
      

  2.   

    DataTable mydt = (DataTable)dataGridView1.DataSource;
     mydt.Rows.Add();累赘
      

  3.   

    我是设置的AllowUserToAddRows,末尾自动加一行
    但是,刚开始的时候,也是这么设置的,执行代码后,只增加一行,最末的那行自动往下移动。可现在执行代码第一次,增加两行,算上最末那行,三行了,三行都是空数据。假设datagridview里有1行数据,1行new(AllowUserToAddRows),调试过程,看到。代码执行第一次的时候datatable里有2行,按道理datagridview里算上最末那行,应该是3行,可是datagridview里有了4行,最末行标记isNewRow为true然后,再执行一次,datatable里程了3行,datagridview里程了5行,也就是正确执行了,始终跟datatable同步,每执行一次,加一行,问题就出在第一次执行上面。我把所有的代码都屏蔽了,就剩这个,还是这个问题,百思不得其解啊。刚开始的时候是好的,不知道后来哪里变了下,导致这样的
      

  4.   

    DataTable mydt = (DataTable)dataGridView1.DataSource;//获取dataGridView1数据源
    mydt.Rows.Add(mydt.NewRow());//已经New了一行了,然后又加了一行,是不是两行?
      

  5.   


    不是这个问题,
    mydt.Rows.Add(mydt.NewRow());
    ---------拆成2行代码是这样---------
    DataRow row = mydt.NewRow();
    mydt.Rows.Add(row);
      

  6.   

    问题再补充下,不知道哪里的问题经我测试,我不点击选择datagridview,则只增加1行
    如果我点击了datagridview,选中了其中一行则第一次增加2行,第二次以后就开始正常增加1行了
      

  7.   

    应该是 AllowUserToAddRows = true; 的原因。
      

  8.   

    我也纳闷啊,不知道啥原因
    重新做个form试验,没有问题我做的是个自定义控件,里面的代码控件做完的时候好好的,后来不知道加了什么功能,就变成这样了可恨的,现在全部代码都注释了,还找不到原因。更可恨的,调试也看不出问题,调试直接看到datatable就2行,而datagridview的rows.count已经变成了4,应该是3才对的唯一寄希望,谁遇到过这种情况了
      

  9.   

    感谢CCTV,感谢大家的热情参与,在我无敌不懈的努力下,终于找到答案了,以后有人搜索到,希望对您能有所帮助。在我超级调试的情况下,抽丝剥茧,发现问题出在这里:----------------------解决办法---------------------------------我的datagridview是在自定义控件里,在在定义控件(类似Form,就是背景的那个)的属性里有个 行为--AutoValidate,里面有四个选项,我不知道什么时候改成了Disable,就导致了上面的原因,改回默认:EnablePreventFocusChange,里面的datagridview就正常了。这个属性的中文解释为:指示焦点更改时是否自动验证容器中的控件。------------------------原因分析----------------------------------原因分析下:我的情况出在,我单击选择datagridview中的新行,然后点击按钮执行代码后,就增加两行。不点击datagridview,直接执行代码,就不会增加两行,只会增加一行。估计的意识是:我一点击datagridview的那个最末尾 新行(row.isNewRow),这个新行其实就已经不是newrow了。相当于已经为datagridview加了一行,我再操作datasource中的datatable加一行新行,等datasource变化,datagridview也跟着变化,它会把刚才的行,加上新加上的行,一起变化显示出来。
    ---------------------结束语-----------------------------说了这么多,估计大家也是一头雾水,总之,这帖子以后对某个迷茫中的人指点迷津,就是我最大的荣幸了,这个东西今天烦了我一天
      

  10.   

    哥们,这种类似的情况我碰到两次,一次解决了,一次还没有解决。
    一种情况为,在一个普通的按钮事件里面
    DataRow dr = dt.NewRow();
    dr["EmpId"] = frmSelectCate.drReturn["ID"];
    dr["JoinMember"] = frmSelectCate.drReturn["EmpName"];
    dt.Rows.Add(dr);
    dt.AcceptChanges();
    这样做就会出现新增两行的情况,一行有数据,一行为空白行。
    另一种情况是在datagridview的双击事件里面  
    DataRow dr = dt.NewRow();
    dr["EmpId"] = frmSelectCate.drReturn["ID"];
    dr["JoinMember"] = frmSelectCate.drReturn["EmpName"];
    dt.Rows.Add(dr);
    dt.AcceptChanges();
    当然此时也会出现上述状况。
    正对第一个在按钮事件进行新增行的情况,
    只需要在前面加上这句话,
    #region 这句话
    this.dataGridView.CancelEdit();
    #endregion
    就可以解决新增空白行的问题。
    但针对第二种情况,无论是按照楼主的方法,还是按照我的那个方法,都不能解决。
      

  11.   

    今天我也遇着这问题了,之前遇着但可能很快搞定了所以没记录。
    刚又折腾了近一个小时才搞定,中途试过你的方法,不管用。
    然后我就代码: 
                    DataTable dt = dgv.DataSource as DataTable;
                    dt.AcceptChanges();
                    DataRow dr=dt.NewRow();
                    dr[""]=..;
                    dt.Rows.Add(dr);
    问题解决。