日期:2014-05-18  浏览次数:20428 次

Dataset中数据生命周期问题?
我现在程序开头定义了一个全局变量:DataSet ds=new DataSet();
  然后在一个函数bindMonthsElectricityNumberData()中给控件Gridview1控件绑定了数据源ds。
  然后我应用在另外一函数(查询Button响应事件)中调用函数:xlsGridview(ds, "data");//用于导出Excel
  但在foreach (DataColumn col in table.Columns)处报错:未将对象引用设置到对象的实例
通过调试发现DataTable table = bs.Tables["singlemoter1"];中table为Null。
  Gridview1可以显示数据,说明Dataset中有过数据,但导出函数中为null了,可能被清空了。但是不知道怎么解决???忘高手指点。
  我尝试过,在刚绑定Gridview1数据后,调用xlsGridview(ds, "data");可以导出。
  该怎么样才能让Dataset数据不被清空呢?
 
C# code

 private void xlsGridview(DataSet bs, string xlsName)
    {
        XlsDocument xls = new XlsDocument();

        int rowIndex = 1;
        int colIndex = 0;


        DataTable table = bs.Tables["singlemoter1"];
        Worksheet sheet = xls.Workbook.Worksheets.AddNamed("sheet");//状态栏标题名称
        Cells cells = sheet.Cells;
        [color=#FF00FF]foreach (DataColumn col in table.Columns)[/color]        {
            colIndex++;
            //sheet.Cells.AddValueCell(1,colIndex,col.ColumnName);//添加XLS标题行
            cells.AddValueCell(1, colIndex, col.ColumnName);
        }

        foreach (DataRow row in table.Rows)
        {
            rowIndex++;
            colIndex = 0;
            foreach (DataColumn col in table.Columns)
            {
                colIndex++;
                //sheet.Cells.AddValueCell(rowIndex, colIndex, row[col.ColumnName].ToString());//将数据添加到xls表格里
                Cell cell = cells.AddValueCell(rowIndex, colIndex,row[col.ColumnName].ToString());//转换为数字型
                //如果你数据库里的数据都是数字的话 最好转换一下,不然导入到Excel里是以字符串形式显示。
                cell.Font.FontFamily = FontFamilies.Roman; //字体
                cell.Font.Bold = true;  //字体为粗体            
            }
        }
        xls.Send();
    }




------解决方案--------------------
确认一下 singlemoter1 是否写对了,你把bs中的表名都列出来看看
------解决方案--------------------
既然你在asp.net板块问,我估计认为你是PostBack以后,数据源掉了

web同winfrom不一样,访问是无连接的。每次PostBack其实都是一个新实例,所以你需要重新加载数据