none
怎样才能让datagridview换行速度快一些 RRS feed

  • 问题

  •  private void dataGrid_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
          CboTestRange.Items.Clear();
          if (dataGrid.Rows.Count > 1 )
          {
    
            dr = ConnectAccess.dataReader(AddToCbostr(dataGrid[0, e.RowIndex].Value.ToString()));
            while (dr.Read())
            {
             //  CboTestRange.Invoke()
             // CboTestRange.Items.Add( dr["range"].ToString());
              cboadd(CboTestRange, dr["range"].ToString());
            }
            dr.Close();
            //DataSet dt = ConnectAccess.dataSet(AddToCbostr(dataGrid[0, e.RowIndex].Value.ToString()));
            //CboTestRange.DataSource = dt.Tables[0];
            //CboTestRange.DisplayMember = "Range";
            //cboitemvalue.ValueMember = "range" ;
            //普通误差结果
            if (CboTestRange.Items.Count>0) CboTestRange.SelectedIndex = 0;
            DataSet ds = ConnectAccess.dataSet(JoinSubsqlstr(dataGrid[0, e.RowIndex].Value.ToString(), 1));
            DataGrid1.DataSource = ds.Tables[0];
            if (ConnectAccess.IsExits("select top 1 * from brainresult"))
            {
              //将智能电表检定选项添加到列表框
              Cbobrainpower.Items.Clear();
              dr = ConnectAccess.dataReader("SELECT DISTINCT(iFunctionNo) FROM brainresult Where MeterID=" + dataGrid[0, e.RowIndex].Value.ToString() + " ORDER BY [iFunctionNo]");
              while (dr.Read())
              {
                // Cbobrainpower.Items.Add(AddItemtobrain(dr[0].ToString()));
                cboadd(Cbobrainpower, AddItemtobrain(dr[0].ToString()));
              }
              dr.Close();
              if (Cbobrainpower.Items.Count > 0) Cbobrainpower.SelectedIndex = 0;
              //智能电表结果显示
    
              try
              {
                ds = ConnectAccess.dataSet(JoinBrainPowerstr(dataGrid[0, e.RowIndex].Value.ToString(), Cbobrainpower.Text.Substring(0, Cbobrainpower.Text.IndexOf('.'))));
                dataGrid2.DataSource = ds.Tables[0];
              }
              catch
              {
              }
            }
            //特殊误差数据,影响量,谐波数据
           try
           {
             ds = ConnectAccess.dataSet(JoinSpecialstr(dataGrid[0,e.RowIndex].Value.ToString()));
             dataGrid3.DataSource = ds.Tables[0];
           }
           catch
           {
           }
          }
        }
    

    我知道是在那里使的datagrid换行速度慢:就是更新combobox里的值的时候,因为我屏蔽这相关语句之后速度明显快了。

                    dr = ConnectAccess.dataReader(AddToCbostr(dataGrid[0, e.RowIndex].Value.ToString()));
                    while (dr.Read())
                    {
                     //   CboTestRange.Invoke()
                      //  CboTestRange.Items.Add( dr["range"].ToString());
                       cboadd(CboTestRange, dr["range"].ToString());
                    }
                    dr.Close();
                    //DataSet dt = ConnectAccess.dataSet(AddToCbostr(dataGrid[0, e.RowIndex].Value.ToString()));
                    //CboTestRange.DataSource = dt.Tables[0];
                    //CboTestRange.DisplayMember = "Range";
                    //cboitemvalue.ValueMember = "range" ;
    有人跟我说是因为while(dr.read())导致的,叫我用dataset可是我发现速度还是一样慢啊,于是我又想到代理,可是还是如此,不知怎么样才能让它快一点,请各位高手赐教。


    can you help me?
    2010年9月13日 9:36

答案

  • 你好!

    可能是 Combobox 中需要创建的项比较多。改为下面的方式试试。

    try
    {
      CboTestRange.BeginUpdate();
    
      while (dr.Read())
      {
        CboTestRange.Invoke()
        CboTestRange.Items.Add( dr["range"].ToString());
        cboadd(CboTestRange, dr["range"].ToString());
      }
    }
    finally
    {
      CboTestRange.EndUpdate();
    }
    


    知识改变命运,奋斗成就人生!
    2010年9月14日 2:49
    版主
  • Combobox 是有这两个方法的。
    知识改变命运,奋斗成就人生!
    2010年9月15日 2:47
    版主

全部回复

  • 你好!

    可能是 Combobox 中需要创建的项比较多。改为下面的方式试试。

    try
    {
      CboTestRange.BeginUpdate();
    
      while (dr.Read())
      {
        CboTestRange.Invoke()
        CboTestRange.Items.Add( dr["range"].ToString());
        cboadd(CboTestRange, dr["range"].ToString());
      }
    }
    finally
    {
      CboTestRange.EndUpdate();
    }
    


    知识改变命运,奋斗成就人生!
    2010年9月14日 2:49
    版主
  • 怎么我的c#2008中combobox没有BeginUpdate跟.EndUpdate这两个属性的。而且即使是combobox只添加一个项跟添加多个item的速度是一样的。


    can you help me?
    2010年9月14日 3:28
  • 没人回复我的???

     


    can you help me?
    2010年9月15日 2:30
  • Combobox 是有这两个方法的。
    知识改变命运,奋斗成就人生!
    2010年9月15日 2:47
    版主
  • 没有多大的改观,速度还是差不多。看来只能这样了。


    can you help me?
    2010年9月15日 6:13