BindingSource bs = new BindingSource();
        private int datID;        public Form2(int dID)
        {
            InitializeComponent();
            dgv_ptitle.AutoGenerateColumns = false;
            titleType.DataSource = tdc.getCVS("类型");
            titleType.DisplayMember = "cvName";
            titleType.ValueMember = "cvID";
            datID = dID;
            GridBind();
        }        private void GridBind()
        {
            List<PM_Title> pts = tdc.getTitles(datID);
            if (pts.Count > 0)
            {
                bs.DataSource = pts;
                bs.AllowNew = true;
                dgv_ptitle.DataSource = bs;
            }
        }
  在datagridview使用内建行添加数据。
1、没有绑定数据时,直接设置AllowUserToAddRows=true即可添加新行;没有问题。
2、直接绑定数据后(dgv_ptitle.DataSource = pts),设置AllowUserToAddRows=true无效,使用BindingSource绑定数据并设置bs.AllowNew = true;可在最后出现新行;没有问题。
3、在第二种情况下,如果表的列中有非DataGridViewTextBoxColumn列,如DataGridViewComboBoxColumn或自定义的日期选择列时,点击新行添加数据时报错,找不到DataGridViewComboBoxColumn的值,或把日期选择列当作TextBox,导致数据转换出错。
 
  请问各位大侠有没有好的解决方案,网上暂时还找不到,大家都来讨论一下。
  前提一定是在datagridview里内建新行。

解决方案 »

  1.   

    DataGridView绑定数据后不允许添加行的. 你可以通过 pts.Add(newData); 这种方式添加源数据. 添加后,DataGridView就会自动添加行了.
      

  2.   

    纯文本型的只用到Textbox的可以实现的。很多datagridview在同一个界面,编辑完后想一起保存,单个添加保存操作太麻烦了。
      

  3.   

    实现BindingSource的AddingNew方法,给新加的行赋初值
      

  4.   

    BindingSource.AddNew()来操控datagridview新增空白行,因为有bingingsorce会受其控制
      

  5.   

    用BindingSource出现的新行还是和其他的行属性不一样,Textbox之外的列属性不能正常显示
      

  6.   

    以前做的就只有在DataTable里面直接加一条信息进去绑定。
    像你现在做的这种我没有试过。。
    学习中。。
      

  7.   

    找不到DataGridViewComboBoxColumn的值,是因为你PM_Title对应属性的初始值为0,而下拉列表里没有这个值,所以报错。
    DateTime报错不知道你日期选择列是怎么写的。
      

  8.   

    DataRow drw = dtAdd.NewRow();
    drw["用户编号"] = teUserID.Text.Trim();
    drw["用户名称"] = teUserName.Text.Trim();
    dtAdd.Rows.Add(drw);
      

  9.   

    日期选择列是自己写的继承了DateTimePicker和DataGridViewTextBoxCell的一个类。没有绑定数据的情况下使用是没问题的,绑定数据后编辑也没有问题。
      

  10.   

    结贴,谢谢大家的提示,问题解决了。分享一下:
    1、对于文本列不用做处理。
    2、对于下拉列表列,添加DataError事件,不用做任何处理。
    3、日期选择列,参考 http://blog.csdn.net/lgh112437/archive/2010/01/27/5262122.aspx
    这样就可以实现在DataGridView里面内建和修改数据了。感谢大家,散分
      

  11.   

    我在DataGridView里选中默认新行的状态下,用代码在它的源数据表中添加一行,为啥在DataGridView界面中除了我添加那行外,会出来两个新行呢???