Ashish Rathore
Ashish Rathore

Reputation: 2696

How to stop refreshing of asp table content on any post back event

I have an asp:grid and a asp:table on a same aspx page field with same datasorce on page load. After loading of page any postback event table got refreshed and shows blank table but still grid view shows all records.

Can anyone tell me how can we prevent refreshing of asp:table on any postback event?

Edit-1

Code for Grid and Table fill

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        DataSet ds = new DataSet();
        ds = clsTransaction.Select(@"SELECT TOP 10000 A.reid AS [ID],
A.nm AS [Name],
B.nm AS [Server],
CASE WHEN D.nm IS NULL THEN A.nm ELSE D.nm END as [Parent],
CASE WHEN C.nm IS NULL THEN A.nm ELSE C.nm END as [Top Perent],
CASE WHEN A.isparent = 1 THEN 'Not a group reseller' ELSE 'Group reseller' END AS [Is Group] 
FROM tblReseller AS A
LEFT OUTER JOIN tblwser B on (A.wsid = B.wsid)
LEFT OUTER JOIN tblReseller AS C ON (A.tparentid = C.acid AND A.wsid = C.wsid)
LEFT OUTER JOIN tblReseller AS D ON (A.parentid = D.acid AND A.wsid = D.wsid)", DataSendBSSWEB.ServerDbEnum.MainSqlServer, false);

        #region Table fill
        TableRow tr = new TableRow();
        TableCell tc = new TableCell();
        foreach (DataColumn dc in ds.Tables[0].Columns)
        {
            tc = new TableCell();
            tc.Text = dc.ColumnName;
            tr.Cells.Add(tc);
        }
        tblview.Rows.Add(tr);
        foreach (DataRow dr in ds.Tables[0].Rows)
        {
            tr = new TableRow();
            foreach (object obj in dr.ItemArray)
            {
                tc = new TableCell();
                tc.Text = obj.ToString();
                tr.Cells.Add(tc);
            }
            tblview.Rows.Add(tr);
        }
        #endregion

        #region Grid Fill
        grvView.DataSource = ds.Tables[0];
        grvView.DataBind();
        grvView.EnableViewState = true;
        #endregion
    }
}

Upvotes: 0

Views: 1618

Answers (1)

zey
zey

Reputation: 6103

The asp:table object is not a data bound control and does not store its contents in ViewState . I think you should bind your table's data outside of if (!Page.IsPostBack) :)

protected void Page_Load(object sender, EventArgs e)
{
    DataSet ds = new DataSet();
    ds = clsTransaction.Select(@"SELECT TOP 10000 A.reid AS [ID],
A.nm AS [Name],
B.nm AS [Server],
CASE WHEN D.nm IS NULL THEN A.nm ELSE D.nm END as [Parent],
CASE WHEN C.nm IS NULL THEN A.nm ELSE C.nm END as [Top Perent],
CASE WHEN A.isparent = 1 THEN 'Not a group reseller' ELSE 'Group reseller' END AS [Is     Group] 
FROM tblReseller AS A
LEFT OUTER JOIN tblwser B on (A.wsid = B.wsid)
LEFT OUTER JOIN tblReseller AS C ON (A.tparentid = C.acid AND A.wsid = C.wsid)
LEFT OUTER JOIN tblReseller AS D ON (A.parentid = D.acid AND A.wsid = D.wsid)",     DataSendBSSWEB.ServerDbEnum.MainSqlServer, false);

    #region Table fill
    TableRow tr = new TableRow();
    TableCell tc = new TableCell();
    foreach (DataColumn dc in ds.Tables[0].Columns)
    {
        tc = new TableCell();
        tc.Text = dc.ColumnName;
        tr.Cells.Add(tc);
    }
    tblview.Rows.Add(tr);
    foreach (DataRow dr in ds.Tables[0].Rows)
    {
        tr = new TableRow();
        foreach (object obj in dr.ItemArray)
        {
            tc = new TableCell();
            tc.Text = obj.ToString();
            tr.Cells.Add(tc);
        }
        tblview.Rows.Add(tr);
    }
    #endregion


if (!Page.IsPostBack)
{

    #region Grid Fill
    grvView.DataSource = ds.Tables[0];
    grvView.DataBind();
    grvView.EnableViewState = true;
    #endregion
}
}

If you don't want to populate table on every pageLoad , I recommend asp:FormView .
You can see the reference here.
And you can add your table in FormView's <ItemTemplate> .

Upvotes: 1

Related Questions