PagerTemplate dissapearing

  • Thread starter Thread starter someone
  • Start date Start date
S

someone

Hi,

I have added a PagerTemplate to a gridview, where I can select how many
records I want to show per page(20/50/100). I use this to set the
gridview pagesize.
The fact is that when I have 80 records to show and the gridview
pagesize is set to 100, the PagerTemplate dissapear, and I can't set the
records per page until I do a new query.

Is there a way to set the PagerTemplate always visible?.

In advance thanks for any help.
Regards,
Marcelo.
 
Hi,

I have added a PagerTemplate to a gridview, where I can select how many
records I want to show per page(20/50/100). I use this to set the
gridview pagesize.
The fact is that when I have 80 records to show and the gridview
pagesize is set to 100, the PagerTemplate dissapear, and I can't set the
records per page until I do a new query.

Is there a way to set the PagerTemplate always visible?.

In advance thanks for any help.
Regards,
Marcelo.

Try to set the BottomPagerRow property to true.
In addition, take a look at http://www.ryanmcdonnell.com/always-show-the-pagertemplate-in-gridview-control/

Hope this helps
 
Thanks a lot, that solved the problem.

Regards,
Hi,

I have added a PagerTemplate to a gridview, where I can select how many
records I want to show per page(20/50/100). I use this to set the
gridview pagesize.
The fact is that when I have 80 records to show and the gridview
pagesize is set to 100, the PagerTemplate dissapear, and I can't set the
records per page until I do a new query.

Is there a way to set the PagerTemplate always visible?.

In advance thanks for any help.
Regards,
Marcelo.

Try to set the BottomPagerRow property to true.
In addition, take a look at
http://www.ryanmcdonnell.com/always-show-the-pagertemplate-in-gridview-control/

Hope this helps
 
Hi again,

I added this method:

protected void gridview1_DataBound(object sender, EventArgs e)
{
gridview1.BottomPagerRow.Visible = true;
}

Now when the record per pages is set to 100 and the number of record of
the query is lower (80 records as an example), now the PagerTemplate
appears in the webpage, but if I press the next or previous button the
PagerTemplates dissapears.
I think I have to set the BottomPagerRow property to true in another
method but I don't know wich one.

Regards,
Marcelo.
Alexey Smirnov escribió:
 
Hi again,

I added this method:

protected void gridview1_DataBound(object sender, EventArgs e)
         {
             gridview1.BottomPagerRow.Visible = true;
         }

Now when the record per pages is set to 100 and the number of record of
the query is lower (80 records as an example), now the PagerTemplate
appears in the webpage, but if I press the next or previous button the
PagerTemplates dissapears.
I think I have to set the BottomPagerRow property to true in another
method but I don't know wich one.

Regards,
Marcelo.
Alexey Smirnov escribió:






- Show quoted text -

Why did you add it into gridview1_DataBound? I think this is the
problem. Try Page_Load instead
 
Why did you add it into gridview1_DataBound? I think this is the
problem. Try Page_Load instead

Thanks Alexey for your answer.
I added it into gridview1_DataBound because I found some link where it
said that it must be added after databinding.
I'm not good enough with asp.net and english yet. =)

When I try to add it to Page_Load() I receive an error:
System.NullReferenceException: Object reference not set to an instance
of an object.

Thanks again.
Alexey Smirnov escribió:
 
 > Why did you add it into gridview1_DataBound? I think this is the
 > problem. Try Page_Load instead

Thanks Alexey for your answer.
I added it into gridview1_DataBound because I found some link where it
said that it must be added after databinding.
I'm not good enough with asp.net and english yet. =)

When I try to add it to Page_Load() I receive an error:
System.NullReferenceException: Object reference not set to an instance
of an object.

Thanks again.
Alexey Smirnov escribió:




- Show quoted text -

It tells that somewhere is an error. How did you setup the grid, is it
created in the code? Maybe you can post the complete code here...
 
Well, the error is here:
protected void Page_Load(object sender, EventArgs e)
{
gridview1.BottomPagerRow.Visible = true; //**ERROR**//
if (!IsPostBack)
{
OnViewInitialized();
}
OnViewLoaded();
}

It looks like it can't find the BottomPagerRow at that time.
But I don't know why...

Thanks for you help.
Regards,
Marcelo.
Thanks Alexey for your answer.
I added it into gridview1_DataBound because I found some link where it
said that it must be added after databinding.
I'm not good enough with asp.net and english yet. =)

When I try to add it to Page_Load() I receive an error:
System.NullReferenceException: Object reference not set to an instance
of an object.

Thanks again.
Alexey Smirnov escribió:




- Show quoted text -

It tells that somewhere is an error. How did you setup the grid, is it
created in the code? Maybe you can post the complete code here...
 
Well, the error is here:
protected void Page_Load(object sender, EventArgs e)
{
        gridview1.BottomPagerRow.Visible = true; //**ERROR**//
        if (!IsPostBack)
        {
                OnViewInitialized();
          }
    OnViewLoaded();

}

It looks like it can't find the BottomPagerRow at that time.
But I don't know why...

Thanks for you help.
Regards,







It tells that somewhere is an error. How did you setup the grid, is it
created in the code? Maybe you can post the complete code here...- Hide quoted text -

- Show quoted text -

Ah, I see. You should call BottomPagerRow after you binded the grid.

Like this

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
OnViewInitialized();
}
OnViewLoaded();

gridview1.BottomPagerRow.Visible = true;

}
 
Ah, I see. You should call BottomPagerRow after you binded the grid.

Like this

 protected void Page_Load(object sender, EventArgs e)
{
             if (!IsPostBack)
        {
                OnViewInitialized();
          }
    OnViewLoaded();

   gridview1.BottomPagerRow.Visible = true;



}- Hide quoted text -

- Show quoted text -- Hide quoted text -

- Show quoted text -

Here's more info regarding this property
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.bottompagerrow.aspx

"The BottomPagerRow property is available only after the GridView
control creates the bottom pager row in the RowCreated event."

So, the reason of the error was that the bottom pager row was not yet
created when you call it before the GridView is bound to its data
source...
 
Alexey Smirnov escribió:
Ah, I see. You should call BottomPagerRow after you binded the grid.

Like this

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
OnViewInitialized();
}
OnViewLoaded();

gridview1.BottomPagerRow.Visible = true;

}


Hi Alexey, (Excuse me I sent this to your personal email by error)
If I put it there I think is called just when the page is loaded, but
not when I press the next or previous button, I think this is because de
gridview is in a updatepanel, so not all the page is updated when I
change the page number.
Is there any other place where I can put the method to be called
everytime I change the page?

Thanks a lot for your time.
Regards,
Marcelo.
 
Alexey Smirnov escribió:











Hi Alexey, (Excuse me I sent this to your personal email by error)
If I put it there I think is called just when the page is loaded, but
not when I press the next or previous button, I think this is because de
gridview is in a updatepanel, so not all the page is updated when I
change the page number.
Is there any other place where I can put the method to be called
everytime I change the page?

Thanks a lot for your time.
Regards,
Marcelo.- Hide quoted text -

- Show quoted text -

I think i got it, do you have gridview1_SelectedIndexChanged method?
You need to put gridview1.BottomPagerRow.Visible = true there
 
Hi Alexey,
The solution didn't work.
There must be another place to set the property...

Thanks a lot for your help.
Regards,
Alexey Smirnov escribió:











Hi Alexey, (Excuse me I sent this to your personal email by error)
If I put it there I think is called just when the page is loaded, but
not when I press the next or previous button, I think this is because de
gridview is in a updatepanel, so not all the page is updated when I
change the page number.
Is there any other place where I can put the method to be called
everytime I change the page?

Thanks a lot for your time.
Regards,
Marcelo.- Hide quoted text -

- Show quoted text -

I think i got it, do you have gridview1_SelectedIndexChanged method?
You need to put gridview1.BottomPagerRow.Visible = true there
 
I added this and now it's working ok:
protected void gridview1_PreRender(object sender, EventArgs e)
{
GridView grid = (GridView)sender;
switch (grid.PagerSettings.Position)
{
case PagerPosition.Bottom:
grid.BottomPagerRow.Visible = true;
break;
case PagerPosition.Top:
grid.TopPagerRow.Visible = true;
break;
case PagerPosition.TopAndBottom:
grid.BottomPagerRow.Visible = true;
grid.TopPagerRow.Visible = true;
break;
}

I have another problem now that is when I change from 50 record per pages
(viewing page3) to 100 records per pages (87 records so only have 1 page),
in this case the current page number dissapear, but this is another problem
I have to analyze. I meant it has to show "viewing page 1 of 1" but it's
showing "viewing page of "
I will try to put the code...

Regards,
 
I added this and now it's working ok:
        protected void gridview1_PreRender(object sender, EventArgs e)
        {
            GridView grid = (GridView)sender;
            switch (grid.PagerSettings.Position)
            {
                case PagerPosition.Bottom:
                                    grid.BottomPagerRow.Visible = true;
                                    break;
                case PagerPosition.Top:
                                    grid.TopPagerRow.Visible = true;
                                    break;
                case PagerPosition.TopAndBottom:
                                    grid.BottomPagerRow.Visible = true;
                                    grid.TopPagerRow.Visible = true;
                                    break;
        }

I have another problem now that is when I change from 50 record per pages
(viewing page3) to 100 records per pages (87 records so only have 1 page),
in this case the current page number dissapear, but this is another problem
I have to analyze. I meant it has to show "viewing page 1 of 1" but it's
showing "viewing page  of   "
I will try to put the code...








- Show quoted text -

If I were you I would add a label and put my custom text there. It's
ugly to see "page 1 of 1", and even "page 1" makes no sense to me
because there is no other page. Again, what happens if result returns
no records? It will be again the same situation either "page 1 of 0"
or no text at all... I would do following

if (gridview.rows.count == 0)
label.text = "nothing found"
else if if (gridview.rows.count < pagesize)
label.text = "page 1"
else if if (gridview.rows.count > pagesize)
label.text = "page x of y"
 
My solution was to add the following pagertemplate:

//***
<PagerTemplate>
<asp:Label ID="Label1" runat="server" Text="Show Rows:" />
<asp:DropDownList CssClass="LetraNormal" ID="RegsPag"
runat="server" AutoPostBack="true"
OnSelectedIndexChanged="RegsPag_SelectedIndexChanged">
<asp:ListItem Value="20" />
<asp:ListItem Value="50" />
<asp:ListItem Value="100" />
</asp:DropDownList>
&nbsp;
Page
<asp:TextBox ID="IraPag" runat="server" AutoPostBack="true"
OnTextChanged="IraPag" CssClass="irapag" />
of
<asp:Label ID="lblTotalNumberOfPages" runat="server" />
&nbsp;
<asp:Button ID="Button4" runat="server" CommandName="Page"
ToolTip="First Page" CommandArgument="First" CssClass="primero" />

<asp:Button ID="Button1" runat="server" CommandName="Page"
ToolTip="Prev. Page" CommandArgument="Prev" CssClass="anterior" />
<asp:Button ID="Button2" runat="server" CommandName="Page"
ToolTip="Next Page" CommandArgument="Next" CssClass="siguiente" />

<asp:Button ID="Button3" runat="server" CommandName="Page"
ToolTip="Last Page" CommandArgument="Last" CssClass="ultimo" />
</PagerTemplate>
//***


And the following code:

//**
protected void RegsPag_SelectedIndexChanged(object sender,
System.EventArgs e)
{
//CAMBIAR NUMERO DE FILAS A MOSTRAR
//OBTIENE EL NUMERO ELEGIDO
DropDownList _DropDownList = (DropDownList)sender;
//CAMBIA EL PAGESIZE DEL GRID ASIGNANDO EL ELEGIDO
this.gridview1.PageSize =
int.Parse(_DropDownList.SelectedValue);
this.gridview1.PageIndex = 0;
}

protected void gridview1_RowDataBound(object sender,
System.Web.UI.WebControls.GridViewRowEventArgs e)
{
// FORMATEA GRID
if (e.Row.RowType == DataControlRowType.Pager)
{
//ASIGNAMOS VALORES A NUMERO DE PAGINA ACTUAL Y TOTAL
PAGINAS
Label _TotalPags =
(Label)e.Row.FindControl("lblTotalNumberOfPages");
_TotalPags.Text = gridview1.PageCount.ToString();
TextBox _IraPag = (TextBox)e.Row.FindControl("IraPag");
_IraPag.Text = (gridview1.PageIndex + 1).ToString();
//ASIGNA AL DROPDOWNLIST COMO VALOR SELECCIONADO EL
PAGESIZE ACTUAL
DropDownList _DropDownList =
(DropDownList)e.Row.FindControl("RegsPag");
_DropDownList.SelectedValue =
this.gridview1.PageSize.ToString();
}
}

protected void IraPag(object sender, System.EventArgs e)
{
//CAMBIO DE PAGINAS
TextBox txtGoToPage = (TextBox)sender;

int pageNumber;
if (int.TryParse(txtGoToPage.Text.Trim(), out pageNumber)
&& pageNumber > 0 && pageNumber <= this.gridview1.PageCount)
{
this.gridview1.PageIndex = pageNumber - 1;
}
else
{
this.gridview1.PageIndex = 0;
txtGoToPage.Text = "1";
}

}

protected void gridview1_DataBound(object sender, EventArgs e)
{
gridview1.BottomPagerRow.Visible = true;
}

protected void gridview1_PreRender(object sender, EventArgs e)
{
GridView grid = (GridView)sender;
switch (grid.PagerSettings.Position)
{
case PagerPosition.Bottom:
grid.BottomPagerRow.Visible = true;
break;
case PagerPosition.Top:
grid.TopPagerRow.Visible = true;
break;
case PagerPosition.TopAndBottom:
grid.BottomPagerRow.Visible = true;
grid.TopPagerRow.Visible = true;
break;
}


}
//**

I think it's working as I espected.
Now I just need to add a checkbox, to let the user decide if he/she
wants to paginate the result or not.

Regards,
Marcelo.

Alexey Smirnov escribió:
 
Back
Top