Persisting DataTable или GridView DataSource - PullRequest
0 голосов
/ 04 ноября 2011

У меня есть событие Click, которое заполняет DataTable, и DataTable является источником моего GridView.

Затем у меня есть еще одно событие щелчка, которое пытается получить GridView DataSource, и он преобразует его обратно в DataTable:

DataTable dt = (DataTable)GridView1.DataSource;

Но источник данных возвращает ноль. Событие, если я поставлю код и событие Page_Init в ожидании нужного postBack

поэтому я хотел бы знать, как я могу сохранить источник данных вида сетки или 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;
    }

Ответы [ 2 ]

0 голосов
/ 04 ноября 2011

Я почти уверен, что вы можете получить доступ к источнику данных только через событие DataBound или ItemDataBound.Возможно, вы сможете получить доступ к DataRowView для каждого элемента в коллекции Items, но я не уверен:

DataRow row = ((DataRowView)GridView1.Rows[0].DataItem).Row;

Что касается сохранения источника данных, вам нужно подумать, хорошая ли это идея.Варианты хранения источника данных: Session или Cache, но если результирующий набор довольно мал, может быть более эффективным сделать еще один запрос в оба конца, когда вам нужен источник данных.Что бы вы ни решили делать, не храните это во ViewState.

0 голосов
/ 04 ноября 2011

Это может сработать для вас.

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;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...