我有一个 GridView  叫GridWaterTable,它会根据一些查询条件  显示对应的数据。 现在我想补充这样一个功能。做一个下载按钮,用户点击下载按钮以后 GridWaterTable中的数据将以exce表的形式下载给用户。我是这样想的。 DataSet ds = this.GridWaterTable.DataSource as DataSet;
System.Data.DataTable dt = ds.Tables[0];这样的代码却提示GridWaterTable。DataSource 为null
我觉得很奇怪 这个GridWaterTable 显示的时候都是有数据的。不知道是否我的方法有错误。
问题:
1:我该如何取得这个GridWaterTable 中的DataSource 
2:得到这个DataSource 以后我该如何可以让用户下载(没有做过下载,一并在这里请教啦。)
先谢过各位大侠了

解决方案 »

  1.   

    因为 Web  和Winfrom 不一样,  它发布了数据以后是不会保存它的数据源的,所以这个GridWaterTable的数据源再得到以后必然是null  所以 要得到这个数据源 必须在绑定的时候 将数据源写入Session中 或者 ViewState 中
    这个问题我已经知道了。 。 
     关于下载问题我也知道该找了一个方法        protected void Button8_Click(object sender, EventArgs e)
            {
                //object obj = this.GridWaterTable.DataSource;            //Type DataSource = obj.GetType();            string path = Server.MapPath("Download/aa.txt");
                FileInfo fInfo = new FileInfo(path);
                string fname = fInfo.Name;
                Response.Clear();
                Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fname));
                Response.AddHeader("Content-Length", fInfo.Length.ToString());
                Response.ContentType = "application/octet-stream";
                Response.WriteFile(fInfo.FullName);
                Response.Flush();
                Response.End();
            }也可以了。  问题:我该如何 将一个 DataTable 以Exce的格式 提供给用户下载 ?我不想将这个DataTable 写成Exce在服务器中,再将这个Exce的地址提供给用户下载
    我想直接将这个DataTable 转换下  直接写到客户端目录中 。 请问我该怎么做呢?
      

  2.   

    我还是觉得 将DataTable  保存在Session 中太耗资源,如果数据量大的话  是个很麻烦的事情。  有没有什么其它更好的方法可以保存这个数据源呢?  
    或者说我重新查询一次数据库  是否会比将这个数据源保存在Session中划算 ??