过去,我在后面的代码中使用“手动创建的”数据源填充了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为空的事实引起的异常。
我的问题(最后): 我注意到click事件发生在GridView_OnDataBound之前,但即使是OnDataBound,数据源也是null。如何从渲染的GridView获取数据以允许donload?或者我应该从哪里尝试检索它?
答案 0 :(得分:2)
使用设计时数据源时,不使用DataSource属性。而是使用DataSourceID属性,但它包含的只是数据源控件的名称。您将不得不返回SQLDataSource以获取导出所需的信息。
DataView dv = (DataView)sqlDataSource.Select(DataSourceSelectArguments.Empty);
DataTable dt = dv.ToTable();