4 messaggi dal 28 febbraio 2009
Ciao a tutti , ho una gridview che come datasource ha un ObjectDataSource e per lo spostamento tra le pagine ho fatto il PagerTemplate con 4 imageButton (NextPreviousFirstLast) e un DropDownList per spostarsi ad una pagina precisa.
Nel datasource ho una sempluce query che è questa:

SELECT NumDoc, Date, ShiptoName, CustomerPO, OrderClosed
FROM saleordertestata
WHERE (CustomerID = @Username)
ORDER BY NumDoc

Ma quando cerco di spostarmi tra le pagine la griglia si svuota.
Ho trovato dei tutorial , ma che non usavano l'ObjectDataSource , e non capisco perchè facendo il debug mi sono accorto che non passa proprio dal
SelectedIndexChanged del DropDownList , insomma un disastro.
Qualcuno mi puo indicare , se esiste un tutorial che abbia un paging con queste caratteristiche?
Grazie mille
Fabrizio
Facciamo un passo alla volta, tralasciando la drop down list i pulsanti avanti e indietro vanno?
La classe che usi nell'ObjectDataSource supporta la paginazione o tu restituisci sempre tutti i record? In questo caso la pagina la fa la GridView che non è il massimo ma dovrebbe andare.

Ciao

Il mio blog
Homepage
4 messaggi dal 28 febbraio 2009
Ciao , grazie per la risposta
No anche i pulsanti non funzionano , cosa intendi per :
"La classe che usi nell'ObjectDataSource supporta la paginazione o tu restituisci sempre tutti i record?"
perche ho trovato diversi tutorial che nell'ObjectDataSource vengono passati 2 paametri uno con il numero di record per pagina e uno con il record di partenza.
Ma poi lo strano è che con i numeri e basta funzionava.
Comunque non sono riuscito a trovare un tutorial che abbia queste caratteristiche , vorrei tanto farlo funzionare a quest punto , mi fa entrare un nervoso..
Ciao e grazie
60 messaggi dal 17 giugno 2003
qui puoi trovare quello ke ti serve:


http://www.dylanwolf.com/programming/38/

io lo poi modifica creando la barra di navigazione:

public class ODSSortableGridView : GridView
{
#region Properties
private int totalRowCount;
private string defaultSortExpression;
private bool defaultSortReverse = false;

private bool _LinkPagingFormatImage = false; //da impostare su true x avere la paginazione con i vari pulsanti di spostamento
private Literal litTotRecords = new Literal();
Label lblCurrentPage = new Label();
Label lblTotPage = new Label();
private LinkButton lnkFirst = new LinkButton();
private LinkButton lnkPrev = new LinkButton();
private LinkButton lnkNext = new LinkButton();
private LinkButton lnkLast = new LinkButton();
private ImageButton imgbtnFirst = new ImageButton();
private ImageButton imgbtnPrev = new ImageButton();
private ImageButton imgbtnNext = new ImageButton();
private ImageButton imgbtnLast = new ImageButton();
private DropDownList ddlPager = new DropDownList();

[
Description("Sets the default sort expression for this GridView."),
Category("Behavior"),
DefaultValue(null)
]
public string DefaultSortExpression
{
get { return defaultSortExpression; }
set { defaultSortExpression = value; }
}

[
Description("Sets whether the sort direction should be reversed for the default field in this GridView."),
Category("Behavior"),
DefaultValue(false)
]
public bool DefaultSortReverse
{
get { return defaultSortReverse; }
set { defaultSortReverse = value; }
}

[Bindable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[Browsable(false)]
public int TotalRowCount
{
get { return totalRowCount; }
}

[
Description("Mostra spostamento tra pagine con pulsanti image."),
Category("Behavior"),
DefaultValue(false)
]
public bool LinkPagingFormatImage
{
get { return _LinkPagingFormatImage; }
set { _LinkPagingFormatImage = value; }
}

#endregion

#region Paging
protected override void InitializePager(GridViewRow row, int columnSpan, PagedDataSource pagedDataSource)
{
base.InitializePager(row, columnSpan, pagedDataSource);
totalRowCount = pagedDataSource.DataSourceCount;

}

private void Crea_LabelRecord(int TotRecords)
{
int iUpto = 0;
int iStart = this.PageIndex * this.PageSize + 1;

if ((this.PageIndex + 1) == this.PageCount)
iUpto = TotRecords;
else
iUpto = iStart + this.PageSize - 1;

//litTotRecords.Text = string.Concat("records totali: ", TotRecords);
litTotRecords.Text = string.Format("Records visualizzati da {0} a {1} di {2}", iStart, iUpto, TotRecords);
lblCurrentPage.Text = " Pagina ";
lblTotPage.Text = string.Format(" di {0} ", this.PageCount);
}

private void Crea_lnkFirst()
{
lnkFirst.Text = "<<";
lnkFirst.Enabled = true;
imgbtnFirst.ImageUrl = "~/images/Primo.gif";
imgbtnFirst.Enabled = true;
if (this.PageIndex == 0)
{
lnkFirst.Enabled = false;
imgbtnFirst.Enabled = false;
}
lnkFirst.Click += new EventHandler(this.FirstClick);
imgbtnFirst.Click += new ImageClickEventHandler(this.FirstImgClick);
}

private void Crea_lnkPrev()
{
lnkPrev.Text = "<";
lnkPrev.Enabled = true;
imgbtnPrev.ImageUrl = "~/images/Prec.gif";
imgbtnPrev.Enabled = true;
if (this.PageIndex == 0)
{
lnkPrev.Enabled = false;
imgbtnPrev.Enabled = false;
}
lnkPrev.Click += new EventHandler(this.PrevClick);
imgbtnPrev.Click += new ImageClickEventHandler(this.PrevImgClick);
}

private void Crea_lnkNext()
{
lnkNext.Text = ">";
lnkNext.Enabled = true;
imgbtnNext.ImageUrl = "~/images/Succ.gif";
imgbtnNext.Enabled = true;
if (this.PageIndex == this.PageCount - 1)
{
lnkNext.Enabled = false;
imgbtnNext.Enabled = false;
}
lnkNext.Click += new EventHandler(this.NextClick);
imgbtnNext.Click += new ImageClickEventHandler(this.NextImgClick);
}

private void Crea_lnkLast()
{
lnkLast.Text = ">>";
lnkLast.Enabled = true;
imgbtnLast.ImageUrl = "~/images/Ultimo.gif";
imgbtnLast.Enabled = true;
if (this.PageIndex == this.PageCount - 1)
{
lnkLast.Enabled = false;
imgbtnLast.Enabled = false;
}
lnkLast.Click += new EventHandler(this.LastClick);
imgbtnLast.Click += new ImageClickEventHandler(this.LastImgClick);
}

private void Crea_ddlPager()
{
ddlPager.AutoPostBack = true;
for (int i = 1; i <= this.PageCount; i++)
if (ddlPager.Items.FindByValue(i.ToString()) == null)
ddlPager.Items.Add(new ListItem(i.ToString()));
ddlPager.SelectedIndexChanged += new EventHandler(ddlPager_SelectedIndexChanged);
}


private Control[] arrayOfControl(Control[] arr, int iSize)
{
for (int i = 0; i < iSize; i++)
{
arr[i] = new Control();
}
return arr;
}

private TableRow CreaBarraNavigazione()
{
TableRow oRow = new TableRow();
TableCell oCell = new TableCell();
Control[] arrLink = new Control[4];
arrLink = arrayOfControl(arrLink, 4);
Crea_lnkFirst();
Crea_lnkPrev();
Crea_lnkNext();
Crea_lnkLast();
Crea_ddlPager();
switch (LinkPagingFormatImage)
{
case true:
arrLink[0].Controls.Add(imgbtnFirst);
arrLink[1].Controls.Add(imgbtnPrev);
arrLink[2].Controls.Add(imgbtnNext);
arrLink[3].Controls.Add(imgbtnLast);
break;

case false:
arrLink[0].Controls.Add(lnkFirst);
arrLink[1].Controls.Add(lnkPrev);
arrLink[2].Controls.Add(lnkNext);
arrLink[3].Controls.Add(lnkLast);
break;
}

oCell.Controls.AddAt(0, arrLink[0]);
Literal litSeparator1 = new Literal();
litSeparator1.Text = " ";
oCell.Controls.AddAt(1, litSeparator1);
oCell.Controls.AddAt(2, arrLink[1]);
oCell.Controls.AddAt(3, lblCurrentPage);
oCell.Controls.AddAt(4, ddlPager);
oCell.Controls.AddAt(5, lblTotPage);
oCell.Controls.AddAt(6, arrLink[2]);
Literal litSeparator2 = new Literal();
litSeparator2.Text = " ";
oCell.Controls.AddAt(7, litSeparator2);
oCell.Controls.AddAt(8, arrLink[3]);
oCell.HorizontalAlign = HorizontalAlign.Center;
oCell.VerticalAlign = VerticalAlign.Middle;
oRow.Cells.Add(oCell);
return oRow;
}

private Table CreaTabellaPaginazione(int TotRecords)
{
Table oTab = new Table();
TableRow oRow = new TableRow();
TableCell oCell = new TableCell();
//oTab.Width = Unit.Percentage(100);
//oTab.BorderWidth = Unit.Point(1);
//oTab.BorderColor = System.Drawing.Color.Blue;
//riga paginazione
//oTab.Rows.Add(oRow);
oRow = CreaBarraNavigazione();
oTab.Rows.Add(oRow);
//cella record totali
oRow = new TableRow();
Crea_LabelRecord(TotRecords);
oCell.Controls.Add(litTotRecords);
oCell.HorizontalAlign = HorizontalAlign.Center;
oCell.VerticalAlign = VerticalAlign.Middle;
oRow.Cells.Add(oCell);
oTab.Rows.Add(oRow);
return oTab;
}

private void AddSortImage(int columnIndex, GridViewRow headerRow)
{
// Create the sorting image based on the sort direction.
Image sortImage = new Image();
//if (CustomersGridView.SortDirection == SortDirection.Ascending)
if (!(this.odsSortReverse))
{
sortImage.ImageUrl = "~/Images/ascending_sort_16x16.png";
sortImage.AlternateText = "Ordine Crescente";
}
else
{
sortImage.ImageUrl = "~/Images/descending_sort_16x16.png";
sortImage.AlternateText = "Ordine Decrescente";
}
sortImage.ImageAlign = ImageAlign.AbsMiddle;
// Add the image to the appropriate header cell.
headerRow.Cells[columnIndex].Controls.Add(sortImage);

}

protected override void OnRowCreated(GridViewRowEventArgs e)
{
int iColOrdinamento = 0;
if (e.Row.RowType == DataControlRowType.Header)
{
for (int i = 0; i <= e.Row.Cells.Count - 1; i++)
{
foreach (Control c in e.Row.Cells[i].Controls)
{
string strSortExpression = this.Columns[i].SortExpression;
if (c is LinkButton)
{
LinkButton lb = (LinkButton)c;
lb.ToolTip = "Clicca per ordinare";
if (this.odsSortExpression != null)
{
if (strSortExpression.ToUpper() == this.odsSortExpression.ToUpper())
{
iColOrdinamento = i;
//ordinati in ordine decrescente
if (this.odsSortReverse)
{
//lb.Text += " ";
}
else
{
// lb.Text += " ^";
}
//lb.BackColor = System.Drawing.Color.Aqua;
lb.Text += " ";
}

}
}
}
}
if (this.odsSortExpression != null)
AddSortImage(iColOrdinamento, e.Row);
}

if (e.Row.RowType == DataControlRowType.Pager)
{
e.Row.Cells[0].Controls.Clear();
Table oTabPaginazione = new Table();
oTabPaginazione = CreaTabellaPaginazione(totalRowCount);
e.Row.Cells[0].Controls.Add(oTabPaginazione);
}
}

// Vai alla prima pagina
protected void FirstClick(object sender, EventArgs e)
{
this.PageIndex = 0;
ddlPager.SelectedValue = (this.PageIndex + 1).ToString();
}

// Vai alla prima pagina
protected void FirstImgClick(object sender, ImageClickEventArgs e)
{
this.PageIndex = 0;
ddlPager.SelectedValue = (this.PageIndex + 1).ToString();
}

// Vai alla pagina precedente
protected void PrevClick(object sender, EventArgs e)
{
this.PageIndex = this.PageIndex - 1;
ddlPager.SelectedValue = (this.PageIndex + 1).ToString();
}

// Vai alla pagina precedente
protected void PrevImgClick(object sender, ImageClickEventArgs e)
{
this.PageIndex = this.PageIndex - 1;
ddlPager.SelectedValue = (this.PageIndex + 1).ToString();
}

// Vai alla pagina successiva
protected void NextClick(object sender, EventArgs e)
{
this.PageIndex = this.PageIndex + 1;
ddlPager.SelectedValue = (this.PageIndex + 1).ToString();
}

// Vai alla pagina successiva
protected void NextImgClick(object sender, ImageClickEventArgs e)
{
this.PageIndex = this.PageIndex + 1;
ddlPager.SelectedValue = (this.PageIndex + 1).ToString();
}

// Vai all'ultima pagina
protected void LastClick(object sender, EventArgs e)
{
this.PageIndex = this.PageCount - 1;
ddlPager.SelectedValue = (this.PageIndex + 1).ToString();
}

// Vai all'ultima pagina
protected void LastImgClick(object sender, ImageClickEventArgs e)
{
this.PageIndex = this.PageCount - 1;
ddlPager.SelectedValue = (this.PageIndex + 1).ToString();
}

// Cambia pagina
protected void PageClick(object sender, GridViewPageEventArgs e)
{
this.PageIndex = e.NewPageIndex;
}

protected void ddlPager_SelectedIndexChanged(object sender, System.EventArgs e)
{
DropDownList ddlPager = (DropDownList)sender;
int PageID = Convert.ToInt32(ddlPager.SelectedItem.Value);
PageID = PageID - 1;
//ddlFooterPager.SelectedIndexChanged -= new EventHandler(ddlFooterPager_SelectedIndexChanged);
//ddlFooterPager.SelectedValue = ddlPager.SelectedItem.Value;
//ddlFooterPager.SelectedIndexChanged += new EventHandler(ddlFooterPager_SelectedIndexChanged);
//base.OnPageIndexChanging(new GridViewPageEventArgs(PageID));
this.PageIndex = PageID;
}

#endregion

#region ViewState
/// <summary>
/// Returns the current sort expression for this GridView saved in the ViewState.
/// </summary>
public string odsSortExpression
{
get { return (ViewState["sortExpression"] != null) ? (string)ViewState["sortExpression"] : null; }
set { ViewState["sortExpression"] = value; }
}

/// <summary>
/// Returns the current sort direction (reversed or not) for this GridView saved in the ViewState.
/// </summary>
public bool odsSortReverse
{
get { return (ViewState["sortReverse"] != null) ? (bool)ViewState["sortReverse"] : false; }
set { ViewState["sortReverse"] = value; }
}
#endregion

#region ObjectDataSource Interaction
public void DataSource_Selected(object sender, ObjectDataSourceStatusEventArgs e)
{
// If no sorting specified, try defaults
if (String.IsNullOrEmpty(odsSortExpression))
{
odsSortExpression = DefaultSortExpression;
odsSortReverse = DefaultSortReverse;
}

// If sorting is specified or defaults are specified, sort the list returned by
// the Select operation in place.
if (!String.IsNullOrEmpty(odsSortExpression))
{
SortableComparer s = new SortableComparer(odsSortExpression, odsSortReverse);
ArrayList.Adapter((IList)e.ReturnValue).Sort(s);
}
return;
}

/// <summary>
/// Get the DataSource object referenced by this object.
/// </summary>
/// <returns>The ObjectDataSource used by this GridView.</returns>
private ObjectDataSource GetDataSource()
{
if (this.DataSource != null)
{
return (ObjectDataSource)this.DataSource;
}
if (this.DataSourceID != null && this.Parent.FindControl(this.DataSourceID) != null)
{
return (ObjectDataSource)this.Parent.FindControl(this.DataSourceID);
}
return null;
}

private void AttachDataSourceEvent()
{
ObjectDataSource ds = GetDataSource();
if (ds != null) { ds.Selected += new ObjectDataSourceStatusEventHandler(this.DataSource_Selected); }
}
#endregion

#region Life Cycle
protected override void OnSorting(GridViewSortEventArgs e)
{
// If the sort expression is the same as the current one, then reverse the sort order.
if (odsSortExpression == e.SortExpression)
{
odsSortReverse = !odsSortReverse;
}
// Otherwise, use ascending sort order, and move to the first page.
else
{
odsSortReverse = false;
this.PageIndex = 0;
}
odsSortExpression = e.SortExpression;
this.DataBind();
e.Cancel = true;
}

protected override void OnLoad(EventArgs e)
{
AttachDataSourceEvent();
base.OnLoad(e);
}

protected override void OnInit(EventArgs e)
{
ddlPager.ID = "ddlCambioPagina";
base.OnInit(e);
}
#endregion

}



naturalmente ti serve la classe SortableComparer.cs che si occupa di fare il sorting.


per la creazione dei pulsanti uso delle immagini standard nelle varie funzioni Crea_lnkNext

spero ti sia di aiuto
4 messaggi dal 28 febbraio 2009
Ciao a tutti , vi ringrazio per le risposte , poi ho trovato perche non mi funzionava , perche avevo impostato il EnableViewState="False" infatti anche se è una cosa che non mi piace molto come si sa nel campo hidden vengono inseriti i vari parametri per il paging.
Adesso funziona ed è anche veloce grazie ancora
Fabrizio

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.