當欄位增加且資料量變多,在載入資料時,會延遲好幾秒才顯示,若捲動datagridview捲軸,會發生不順閃爍現象。
解決方法一:使用虛擬填充模式(無效)
using System.Reflection; public partial class Form1 : Form { private Customer customerInEdit; private System.Collections.ArrayList customers = new System.Collections.ArrayList(); private Customer customerInEdit; private int rowInEdit = -1; private bool rowScopeCommit = true;
}
private void Form1_Load(object sender, EventArgs e) { this.dataGridView1.VirtualMode = true; this.dataGridView1.CellValueNeeded += new DataGridViewCellValueEventHandler(dataGridView1_CellValueNeeded); }
private void dataGridView1_CellValuePushed(object sender, System.Windows.Forms.DataGridViewCellValueEventArgs e) { Customer customerTmp = null; if (e.RowIndex < this.customers.Count-1) { // If the user is editing a new row, create a new Customer object. if (this.customerInEdit == null) { this.customerInEdit = new Customer( ((Customer)this.customers[e.RowIndex]).CompanyName, ((Customer)this.customers[e.RowIndex]).ContactName); } customerTmp = this.customerInEdit; this.rowInEdit = e.RowIndex; } else { customerTmp = this.customerInEdit; }
// Set the appropriate Customer property to the cell value entered. String newValue = e.Value as String; switch (this.dataGridView1.Columns[e.ColumnIndex].Name) { case "contactNameColumn0": customerTmp.CompanyName = newValue; break;
case "contactNameColumn1": customerTmp.ContactName = newValue; break; } }
|
解決方法二:使用雙緩衝(成功解決問題)
using System.Reflection;
public Form1() { InitializeComponent(); dgvDataView.MakeDoubleBuffered(true); }
public static class ControlExtentions { public static void MakeDoubleBuffered(this Control control, bool setting) { Type controlType = control.GetType(); PropertyInfo pi = controlType.GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic); pi.SetValue(control, setting, null); } }
|
留言列表