none
datagridview能不能插入空白行 RRS feed

  • 问题

  • datagridview能不能插入空白行,用datagridview.rows.insert怎么实现在指定位置插入一行空白行,多谢
    dyx9010
    2010年2月27日 17:47

答案

  • 你好,

    你通过操作数据源来实现添加空行就可以了。

    如数据源为一datatable dt, dt.Rows.Add(dt.NewRow());

    改变数据源然后再把datagridview的数据源设为该datatable,应该是可以的。
    Microsoft Online Community Support
    2010年3月2日 2:21
  • 你好!

    针对你的情况写了个完整的示例。

    主要逻辑:使用排序的方式指定新行显示的位置。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace X.WinForms.UI.Controls.DataGridView
    {
        public partial class BindingSourceInsertRow : Form
        {
            public BindingSourceInsertRow()
            {
                InitializeComponent();
    
                this.InitData();
                this.InitUI();
            }
    
            private void BindingSourceInsertRow_Load(object sender, EventArgs e)
            {
                // 在第二行前增加两个空行
                this.InsertDemo(1); 
                this.InsertDemo(1);
            }
    
            private System.Windows.Forms.DataGridView dataGridView1;
            private BindingSource bs;
            private DataTable dt;
    
            private void InitData()
            {
                this.dt = new DataTable();
    
                this.dt.Columns.Add("Id", typeof(Guid));
                this.dt.Columns.Add("Name", typeof(string));
                // 排序字段,用于指定行显示的位置
                // 若不想将此字符显示在界上,可以手动绑定列或将此列隐藏
                this.dt.Columns.Add("Order", typeof(int)); 
    
                this.dt.Rows.Add(new object[] { Guid.NewGuid(), "Name1", 0 });
                this.dt.Rows.Add(new object[] { Guid.NewGuid(), "Name2", 1 });
    
                this.bs = new BindingSource(this.dt, null);
                // 设置排序字段为 “Order”
                this.bs.Sort = "Order"; 
            }
    
            private void InitUI()
            {
                this.dataGridView1 = new System.Windows.Forms.DataGridView();
                this.dataGridView1.Dock = DockStyle.Fill;
                this.dataGridView1.DataSource = this.bs;
                this.Controls.Add(this.dataGridView1);
            }
    
            private void InsertDemo(int order)
            {
                string filter = string.Format("Order >= {0}", order);
    
                // 递增符合条件的 Order 以便,新行能正确的显示到指定的位置上
                foreach (DataRow row in this.dt.Select(filter))
                    row["Order"] = (int)row["Order"] + 1; 
    
                this.dt.Rows.Add(new object[] { DBNull.Value, DBNull.Value, order});
            }
        }
    }
    


    知识改变命运,奋斗成就人生!
    2010年3月2日 4:59
    版主

全部回复

  • 使用DataRow rows;datagridview.Rows.Add(rows);

    具体怎么使用参见MSDN。

    2010年2月28日 1:35
  • 你好!
         dataGridView1.Rows.Insert(3,1);   //第一个参数指定位置,第二个参数指定要插入几行!
    周雪峰
    2010年2月28日 2:56
    版主
  • 我昨天晚上用的this.Rows.Insert(3,1)没有插入新行啊,难道在别的地方还需要设置,如果这句代码可以插入新的空白行的话,我移动行的代码就可以实现了,我先在要移动的行插入一个空行,把源行的值复制过来,然后再删除源行就可以了,请周雪峰版主指点一下
    dyx9010
    2010年2月28日 3:24
  • 不需要allowusretoaddrow=true吧
    dyx9010
    2010年2月28日 3:26
  • 和AllowUsreToAddRows=true关系不大,你这样也不能插入行吗?
    this.dataGridView1.Rows.Add("five", "six", "seven", "eight");
    this.dataGridView1.Rows.Insert(0, "one", "two", "three", "four");
    周雪峰
    2010年2月28日 4:18
    版主
  • 报“当控件被数据绑定时,无法以编程方式向 DataGridView 的行集合中添加行”错误
    dyx9010
    2010年3月1日 13:11
  • 你好,

    你通过操作数据源来实现添加空行就可以了。

    如数据源为一datatable dt, dt.Rows.Add(dt.NewRow());

    改变数据源然后再把datagridview的数据源设为该datatable,应该是可以的。
    Microsoft Online Community Support
    2010年3月2日 2:21
  • 不想对datatable进行操作而直接应用insert或add
    dyx9010
    2010年3月2日 4:22
  • 你好!

    针对你的情况写了个完整的示例。

    主要逻辑:使用排序的方式指定新行显示的位置。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace X.WinForms.UI.Controls.DataGridView
    {
        public partial class BindingSourceInsertRow : Form
        {
            public BindingSourceInsertRow()
            {
                InitializeComponent();
    
                this.InitData();
                this.InitUI();
            }
    
            private void BindingSourceInsertRow_Load(object sender, EventArgs e)
            {
                // 在第二行前增加两个空行
                this.InsertDemo(1); 
                this.InsertDemo(1);
            }
    
            private System.Windows.Forms.DataGridView dataGridView1;
            private BindingSource bs;
            private DataTable dt;
    
            private void InitData()
            {
                this.dt = new DataTable();
    
                this.dt.Columns.Add("Id", typeof(Guid));
                this.dt.Columns.Add("Name", typeof(string));
                // 排序字段,用于指定行显示的位置
                // 若不想将此字符显示在界上,可以手动绑定列或将此列隐藏
                this.dt.Columns.Add("Order", typeof(int)); 
    
                this.dt.Rows.Add(new object[] { Guid.NewGuid(), "Name1", 0 });
                this.dt.Rows.Add(new object[] { Guid.NewGuid(), "Name2", 1 });
    
                this.bs = new BindingSource(this.dt, null);
                // 设置排序字段为 “Order”
                this.bs.Sort = "Order"; 
            }
    
            private void InitUI()
            {
                this.dataGridView1 = new System.Windows.Forms.DataGridView();
                this.dataGridView1.Dock = DockStyle.Fill;
                this.dataGridView1.DataSource = this.bs;
                this.Controls.Add(this.dataGridView1);
            }
    
            private void InsertDemo(int order)
            {
                string filter = string.Format("Order >= {0}", order);
    
                // 递增符合条件的 Order 以便,新行能正确的显示到指定的位置上
                foreach (DataRow row in this.dt.Select(filter))
                    row["Order"] = (int)row["Order"] + 1; 
    
                this.dt.Rows.Add(new object[] { DBNull.Value, DBNull.Value, order});
            }
        }
    }
    


    知识改变命运,奋斗成就人生!
    2010年3月2日 4:59
    版主
  • 你这个还是对dt进行操作插入行啊
    dyx9010
    2010年3月2日 12:08
  • 你好!
         在数据绑定的情况下,你不对dt操作不能在DataGridView中插入行,我在你其他的帖子中已经说明了这个问题了啊!
    周雪峰
    2010年3月2日 12:35
    版主