可以考虑用异步来填充,如果同步操作,程序不能及时的响应刷新,可以参考一下IAsyncResult:在执行此对象的主线程上执行委托。
IAsyncResult BeginInvoke(
   Delegate method,
   object[] args
);

解决方案 »

  1.   

    如果大到这种程度,就不应该用DataSet了。可以算一下,DataSet是存放在内存中的,而要把1G的内存填满只需要几秒钟不到的时间,如果需要进度条,至少也要有10秒左右的时间才有意义,那么这个时候内存将被填充到10G甚至更多。结果就是硬盘狂响速度狂慢。这样的程序谁敢要?
      

  2.   

    楼上仁兄所言及是,我只想做一个异地服务器数据的更新程序,由于找不到更好的方法,才出此下策。
    对于委托的概念还不是很清楚。但我会继续研究。
    想到楼上hbxtlhx(最后一片绿叶) 说的“异步填充”,能不能给一个具体例子?
    再次感谢
      

  3.   

    具体的显示进度可能做不到,不过做一个表示正在读出数据的状态显示倒是可以的,我有一个做法不一定合适,但是你可以参考一下:private delegate DataSet dlgFillData(string conStr, string cmdText);private DataSet FillData(string conStr, string cmdText)
    {
    SqlConnection cn = new SqlConnection(conStr);
    cn.Open();
    SqlCommand cm = cn.CreateCommand();
    cm.CommandText = cmdText;
    cm.CommandType = CommandType.Text;
    SqlDataAdapter ada = new SqlDataAdapter();
    ada.SelectCommand = cm; DataSet ds = new DataSet();
    ada.Fill(ds); return ds;
    }private void button1_Click(object sender, System.EventArgs e)
    {
    string conStr = "server=server2;database=EPHAOCAI;uid=ephaocai_user;pwd=123;";
    string cmdText = "SELECT * FROM dbo.BID_BidCommerceSubProduct"; dlgFillData fd = new dlgFillData(this.FillData); IAsyncResult sync = fd.BeginInvoke(conStr, cmdText,null,null); while (!sync.IsCompleted)
    {
    this.progressBar1.PerformStep();//min=0;step=1;max=1000000;
    if (this.progressBar1.Value == this.progressBar1.Maximum)
    {
    this.progressBar1.Value = 0;
    } Application.DoEvents();
    }
    object tmpObj = fd.EndInvoke(sync); if (tmpObj is DataSet)
    {
    DataSet ds = (DataSet)tmpObj;
    this.dataGrid1.DataSource = ds.Tables[0];
    }
    }
      

  4.   

    啊,异步调用!那正是我想要的。
    感觉很有意思,但是很让我费解
    private delegate DataSet dlgFillData(string conStr, string cmdText);dlgFillData fd = new dlgFillData(this.FillData);
    fd会返回一个DataSet吗?
    它是怎样运作的?
      

  5.   

    up,顺便再请教一个问题
    假如我有一个DataSet,里面有相当多的数据,
    1.怎样对这些数据再筛选,比如使用Select语句检索?2.我可以将它保存为XML文件,怎么将它保存为Excel文件呀?请给出具体方法。
    再次感谢
      

  6.   

    假设DateSet中只有一个叫Table的表
      

  7.   

    TABLE可以支持条件选择,用DATAVIEW就可以实现,只是好像不支持SQL语句,呵,伤心的。所以,有些关键字不能用
      

  8.   

    过滤DataSet数据,用DataView最方便了,不过让人遗憾的是DataView的RowFilter只是相当于SQL语句的Where,所以,能在Where后面写的关键字和语句,RowFilter后面都能写,但像DISTINCT关键字就不能用了
      

  9.   

    过滤DataSet数据,用DataView最方便了
    能给出具体代码吗?太感谢了