当前位置: 代码迷 >> ASP.NET >> Dataset中数据生命周期有关问题
  详细解决方案

Dataset中数据生命周期有关问题

热度:7133   发布时间:2013-02-25 00:00:00.0
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其实都是一个新实例,所以你需要重新加载数据
  相关解决方案