我在DataGrideView 添加了 DateTimePicker 控件,当选中某一单元格时,显示该控件,当用户选择一个日期后,将这个日期赋值到单元格中。问题是 我现在选择了一个日期后,DataGrideView并没有在下面新增一行,如果我在别的单元格手动输入一些文字时,DataGrideView是会在下面新增一行的。请问该如何解决?谢谢

解决方案 »

  1.   

    我选择了一个日期
    没有此时没有新增一行如果是手输的文字会新增一行的
    问题是如果只选了一个日期,我又不要这行了,根本没法删除,调试时发现DataTable里还是会有个日期
    不知道怎么解决
      

  2.   

    combox 好像也一样不会出发下一行的事件
      

  3.   

    不要了 ,按"Delete"键 可以删掉啊
      

  4.   

    自己写上一句  dgv.Rows.Add() 倒是可以实现,但是不在末尾……
      

  5.   

    如果你选择的那一行左边没有“*”号,那你就可以直接编辑,也能删除。
    出现你的问题的情况就是左边有“*”号标记,代表这条数据还没有提交。
    这样的话 有一个方法可以解决;
                if (dataGridView2.SelectedCells[0].RowIndex == dataGridView2.Rows.Count-1)//判断这行数据是否提交了
                {
                    dataGridView2.Rows.Add();
                    dataGridView2.Rows[dataGridView2.Rows.Count - 2].Cells[0].Value = dateTimePicker1.Value.ToShortDateString();
                }
                else
                {
                    dataGridView2.SelectedCells[0].Value = dateTimePicker1.Value.ToShortDateString();
                } 
      

  6.   


    非常感谢! 不过好像还是有问题,我的DataGrideView 是用DataTable 进行数据绑定的,然后按照你的方法,我在 DateTimePicker 的 CloseUp 事件中 添加了你的 代码,然后 报了这个错 : “当控件被数据绑定时,无法以编程方式向DataGrideView的行集合中添加行!”
      

  7.   

    这个是当然的呀。这样的话,你就必须先对绑定的DataTable进行操作数据操作,然后重新绑定DataGrideView的DataSource啊。
      

  8.   


    if (dataGridView2.SelectedCells[0].RowIndex == dataGridView2.Rows.Count-1)
    {
        dt.Rows.Add();//dt是你绑定的DataTable数据源
        dt.Rows[dataGridView2.SelectedCells[0].RowIndex - 1][dataGridView2.SelectedCells[0].ColumnIndex] = dateTimePicker1.Value.ToShortDateString();
    }
    else
    {
        dt.Rows[dataGridView2.SelectedCells[0].RowIndex][dataGridView2.SelectedCells[0].ColumnIndex] = dateTimePicker1.Value.ToShortDateString();
    }
    dataGridView2.DataSource = dt;
    给你参考一下。你那里的代码自己琢磨一下。