积极答复者
datagridview能不能插入空白行

问题
答案
-
你好,
你通过操作数据源来实现添加空行就可以了。
如数据源为一datatable dt, dt.Rows.Add(dt.NewRow());
改变数据源然后再把datagridview的数据源设为该datatable,应该是可以的。
Microsoft Online Community Support- 已标记为答案 KeFang Chen 2010年3月5日 3:39
-
你好!针对你的情况写了个完整的示例。主要逻辑:使用排序的方式指定新行显示的位置。
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}); } } }
知识改变命运,奋斗成就人生!- 已标记为答案 KeFang Chen 2010年3月5日 3:39
全部回复
-
你好,
你通过操作数据源来实现添加空行就可以了。
如数据源为一datatable dt, dt.Rows.Add(dt.NewRow());
改变数据源然后再把datagridview的数据源设为该datatable,应该是可以的。
Microsoft Online Community Support- 已标记为答案 KeFang Chen 2010年3月5日 3:39
-
你好!针对你的情况写了个完整的示例。主要逻辑:使用排序的方式指定新行显示的位置。
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}); } } }
知识改变命运,奋斗成就人生!- 已标记为答案 KeFang Chen 2010年3月5日 3:39