我有一个填充DataTable的Click事件,DataTable是我的GridView的源。
然后我有另一个点击事件试图让GridView DataSource e将它转换回DataTable,如:
DataTable dt = (DataTable)GridView1.DataSource;
但Datasource返回null。事件,如果我把代码和Page_Init事件等待正确的postBack
所以我想知道如何持久保存gridview的数据源或DataTable
根据需要进行编辑:
这是整个代码:
ps:Page_Init是获取数据源的另一种尝试
private DataTable _dataTable;
public DataTable dataTable
{
get { return _dataTable; }
set { _dataTable = value; }
}
protected void Page_Init(object sender, EventArgs e)
{
if(Page.IsPostBack)
{
string ctrlname = BLL.Common.GetPostBackControlId(this.Page);
if(ctrlname == "ButtonDownload")
{
DataTable dt = (DataTable)GridView1.DataSource;
}
}
}
protected void Filter_Click(object sender, EventArgs e)
{
string[] status = new string[2];
status[0] = "Paga";
status[1] = "Disponivél";
dataTable = BLL.PagSeguro.GetTransactions(TextBoxInicio.Text, TextBoxFim.Text, status);
GridView1.DataSource = dataTable;
GridView1.DataBind();
}
protected void GetDataSource(object sender, EventArgs e)
{
DataTable dt = (DataTable)GridView1.DataSource;
}
答案 0 :(得分:0)
这可能适合你。
public partial class Demo : System.Web.UI.Page
{
private DataTable _myData = null;
protected DataTable MyData
{
get
{
if (null == _myData)
{
// You would load your data here.
_myData = new DataTable();
}
return _myData;
}
}
protected void Page_Load(object sender, EventArgs e)
{
// Lets say you set your data source here
myGrid.DataSource = this.MyData;
}
protected void Rendering(object sender, EventArgs e)
{
// This is some other event that also needs to get at the data.
DataTable mydata = this.MyData;
}
protected void Unload(object sender, EventArgs e)
{
if (null != _myData)
{
_myData.Dispose();
_myData = null;
}
}
答案 1 :(得分:0)
我很确定您只能通过DataBound
事件或ItemDataBound
事件访问数据源。您可以访问Items
集合中每个项目的DataRowView,但我不确定:
DataRow row = ((DataRowView)GridView1.Rows[0].DataItem).Row;
至于持久化数据源,你需要考虑这是否是个好主意。您存储数据源的选项是Session
或Cache
,但如果结果集非常小,则在需要数据源时进行另一次往返可能更有效。无论您决定做什么,都不要将它存储在ViewState中。