2010-10-15 25 views
2

在过去,我已填充GridView的与代码“手动创建”数据源的后面,通过在页面加载这样做:如何在数据绑定后下载GridView数据?

DataTable myData = SomeMethod(); //Returns a DataTable 
myGrid.DataSource = myData; 
myGrid.DataBind(); 

,每当我想将数据下载到一个CSV文件,我只是添加以下到按钮的Click事件:

DataTable csvData = new DataTable(); 
csvData = (DataTable)myGrid.DataSource; 

//CSV construction, reponse send to browser, etc. 

这工作,因为在GridView的页面加载过程中已经数据绑定,所以在达到Click事件时的数据是可用的。

但是现在我无法使用我在设计时添加的SqlDataSource控件来工作(HTML)。此SqlDataSource绑定到具有自动回发的DropDown控件,以便在更改选择时检索数据。

我运行了网站,数据已经显示在GridView中(EnableViewState = false在每次页面加载时强制查询),然后单击该按钮,仅获取由myGrid.DataSource为null的事实引起的异常。我注意到,点击事件发生在GridView_OnDataBound之前,但即使OnDataBound数据源为null。我如何从渲染的GridView中获取数据以允许重载?或者我应该从哪里尝试检索它?

回答

2

使用设计时数据源时,不使用DataSource属性。而是使用DataSourceID属性,但它包含的是数据源控件的名称。你将不得不返回到你的SQLDataSource来获取你需要导出的信息。

DataView dv = (DataView)sqlDataSource.Select(DataSourceSelectArguments.Empty); 
DataTable dt = dv.ToTable(); 
+0

我刚试过,它的工作完美无瑕。我通常使用手动创建的数据源对象,但这次我需要一个功能齐全的(可排序的,可分页的)GridView,我不想花费太多时间来创建和处理事件。谢谢! – 2010-10-15 21:17:01