winform中怎样减少dataGridView加载大量数据的时间?
我从网上找的代码:
/// <summary>   
/// 创建列   
/// </summary>   
void InitialGridViewData()   
{   
    //创建编号列   
    DataGridViewColumn numcol = new DataGridViewTextBoxColumn();   
    numcol.Name = NumberColName;   
    numcol.HeaderText = NumberColName;   
    numcol.DefaultCellStyle.BackColor = Color.FromArgb(212, 208, 200);   
    numcol.SortMode = DataGridViewColumnSortMode.Programmatic;   
    numcol.ReadOnly = true;   
    numcol.Tag = false;   
    dataGridView.Columns.Add(numcol);   
  
    soFieldInfos osmFieldInfos = oRst.GetFieldInfos();   
    for (int i = 1; i <= osmFieldInfos.Count; i++)   
    {   
        soFieldInfo osmField = osmFieldInfos[i];   
        string columnTitle = osmField.Name;   
        if (!string.IsNullOrEmpty(osmField.Caption))   
            columnTitle = osmField.Caption;   
        DataGridViewColumn col = new DataGridViewTextBoxColumn();   
        col.Name = osmField.Name;   
        col.HeaderText = columnTitle;                   
        dataGridView.Columns.Add(col);   
    }   
    suSuperMap.ReleaseSmComObject(osmFieldInfos);   
    osmFieldInfos = null;   
  
    //采用虚模式来填充数据   
    dataGridView.VirtualMode = true;   
    dataGridView.RowCount = oRst.RecordCount + 1;   
}  
复制代码
 
 
代码
//单元格填充数据事件   
 void dataGridView_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)   
 {   
     // If this is the row for new records, no values are needed.   
     if (e.RowIndex == this.dataGridView.RowCount)   
         return;   
     // 从记录集中读取数据   
     string colName = this.dataGridView.Columns[e.ColumnIndex].Name;   
     if (colName.Equals(NumberColName))   
     {   
         e.Value = e.RowIndex + 1;   
     }   
     else  
     {   
         oRst.MoveTo(e.RowIndex + 1);   
         e.Value = oRst.GetFieldValueText(colName);   
     }   
 } 我不太清楚什么意思?还有没有其他办法? 

解决方案 »

  1.   

    我没用过winform的 虚拟化  但是在其他地方用过感觉已经很快了  可以试试分页 或者 拉动滚动条 加载数据 
      

  2.   

    虚模式来填充数据怎样填充?数据库中Contact1表有一百万条数据?
    private string connectionString = @"Password=2009;Persist Security Info=True;User ID=sa;Initial Catalog=CF_HK;Data Source=INFOWISE-B6B6E8";
    public DataSet GetDataSet()
            {
                SqlConnection conn = new SqlConnection(connectionString);
                SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Contact1", conn);
                ds = new DataSet();
                adapter.Fill(ds, "Contact1");
                return ds;
            }
    获取数据,
    接下来我应该怎样做,谁能给个详细的?
      

  3.   

    的要写DataGridView的事件CellValueNeeded处理过程
      

  4.   

    解决了,下面就是:
    //把数据放到DataTable中
    DataTable c_dtDtTble = null;
    public DataTable GetDataSet()
      {
      SqlConnection conn = new SqlConnection(connectionString);
      SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Contact1", conn);
      ds = new DataSet();
      adapter.Fill(ds, "Contact1");
      c_dtDtTble=ds.Table[0];
      return c_dtDtTble ;
      }
    //动态添加dataGridView列标题
    private void Form1_Load(object sender, EventArgs e)
            {
                    c_intColumnCount = c_dtDtTble1.Columns.Count;
                    for (int i = 0; i < c_intColumnCount; i++)
                    {
                        DataGridViewColumn l_dgvClmn = new DataGridViewTextBoxColumn();
                        l_dgvClmn.Name = c_dtDtTble1.Columns[i].ColumnName;
                        l_dgvClmn.HeaderText = c_dtDtTble1.Columns[i].ColumnName;
                        dgvContact2.Columns.Add(l_dgvClmn);
                    }
            }
    //填充单元格数据
    private void dgvContact1_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
            {
                e.Value = c_dtDtTble.Rows[e.RowIndex][e.ColumnIndex].ToString();
            }