none
获得DataGridView中的新增行指定字段的值 RRS feed

  • 问题

  • 已经设置 this.dataGridView1.AllowUserToAddRows = true。
    我取值的思路:

    foreach(DataGridViewRow dgr in dataGridView1.Rows){

                    if(dgr.IsNewRow){                    
                        Console.WriteLine(dgr.Cells[0].Value.ToString());
                    }    
    但是dgr.Cells[0]始终为NUll。求高人指点,谢谢。。。
    补充:展示出来的数据是绑定数据库的,但是我想在组件中添加数据,并且不绑定事件,而是点击“添加按钮”时进行批量添加。
    • 已移动 Liliane Teng 2011年6月21日 5:22 (发件人:Visual Basic)
    2011年6月20日 6:39

答案

  • 已经设置 this.dataGridView1.AllowUserToAddRows = true。
    我取值的思路:

    foreach(DataGridViewRow dgr in dataGridView1.Rows){

                    if(dgr.IsNewRow){                    
                        Console.WriteLine(dgr.Cells[0].Value.ToString());
                    }    
    但是dgr.Cells[0]始终为NUll。求高人指点,谢谢。。。
    补充:展示出来的数据是绑定数据库的,但是我想在组件中添加数据,并且不绑定事件,而是点击“添加按钮”时进行批量添加。

    等你输入数据之后呢,那一行就不在是新加行了,DataGridView的新加行指的是*号指向的那一行,并不是说你手写了一行,就算是新加行。虽然我们是这么认为的。

     

    所以说你想从IsNewRow来实现这个功能的话,是行不通的。换种方式吧。比如用data table, dataset 等。试一下这种方法:

     

    SqlCommandBuilder local_SqlCommandBuilder = new SqlCommandBuilder(da);

                local_SqlCommandBuilder.ConflictOption = System.Data.ConflictOption.OverwriteChanges;

                da.UpdateCommand = local_SqlCommandBuilder.GetUpdateCommand();

                da.Update(((System.Data.DataTable)this.dataGridView1.DataSource));

                ((System.Data.DataTable)this.dataGridView1.DataSource).AcceptChanges();

    详细信息请参考以下链接:

    Problem with update SQL Table when cell changed in DataGridView。

    通过这种方式,不管你的dataGridView 中出现了什么变化,都会直接反映到数据库中的。

     


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    2011年6月22日 9:16
    版主

全部回复

  • cell 0是手填的值吗?
    http://feiyun0112.cnblogs.com/
    2011年6月21日 6:47
    版主
  • 是的,是手动填的。
    2011年6月21日 8:33
  • 已经设置 this.dataGridView1.AllowUserToAddRows = true。
    我取值的思路:

    foreach(DataGridViewRow dgr in dataGridView1.Rows){

                    if(dgr.IsNewRow){                    
                        Console.WriteLine(dgr.Cells[0].Value.ToString());
                    }    
    但是dgr.Cells[0]始终为NUll。求高人指点,谢谢。。。
    补充:展示出来的数据是绑定数据库的,但是我想在组件中添加数据,并且不绑定事件,而是点击“添加按钮”时进行批量添加。

    等你输入数据之后呢,那一行就不在是新加行了,DataGridView的新加行指的是*号指向的那一行,并不是说你手写了一行,就算是新加行。虽然我们是这么认为的。

     

    所以说你想从IsNewRow来实现这个功能的话,是行不通的。换种方式吧。比如用data table, dataset 等。试一下这种方法:

     

    SqlCommandBuilder local_SqlCommandBuilder = new SqlCommandBuilder(da);

                local_SqlCommandBuilder.ConflictOption = System.Data.ConflictOption.OverwriteChanges;

                da.UpdateCommand = local_SqlCommandBuilder.GetUpdateCommand();

                da.Update(((System.Data.DataTable)this.dataGridView1.DataSource));

                ((System.Data.DataTable)this.dataGridView1.DataSource).AcceptChanges();

    详细信息请参考以下链接:

    Problem with update SQL Table when cell changed in DataGridView。

    通过这种方式,不管你的dataGridView 中出现了什么变化,都会直接反映到数据库中的。

     


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    2011年6月22日 9:16
    版主
  • 谢谢你的回答。果然是理解错了概念。
    2011年6月23日 6:31