Sorting Gridview

martedì 05 settembre 2006 - 10.48

gandalf_03_75 Profilo | Junior Member

Rieccomi di nuovo e stavolta e' per un problema sul sorting di un gridview.
Usando il codice sotto riporato ottengo un errore javascript e nn riesco a risolvere.

Posto il codice

-----------------------------------------------------------------------------------------------------------------
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;

public partial class _Default : System.Web.UI.Page
{

private const string ASCENDING = " ASC";
private const string DESCENDING = " DESC";

protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
BindData();
}
}

private void BindData()
{
Connect cn = new Connect();
cn.OpenConnection();
DataSet ds;
ds = cn.GetDataset("Select IdFilm,Titolo from Films Order by Titolo");
grdvDVD.DataSource = ds;
grdvDVD.DataBind();
}

protected void grdvDVD_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
TableCellCollection cells = e.Row.Cells;

foreach (TableCell cell in cells)
{
cell.Text = Server.HtmlDecode(GenerateScript(cell.Text, grdvDVD));
}
}
}

private string GenerateScript(string columnName, GridView gv)
{
string optionalParam = "Sort$" + columnName;

StringBuilder sb = new StringBuilder();
sb.Append("<a href=\"");
sb.Append("javascript:");
sb.Append(ClientScript.GetPostBackEventReference(gv, optionalParam, false));
sb.Append("\">");
sb.Append(columnName);
sb.Append("</a>");

return sb.ToString();

}

protected void grdvDVD_Sorting(object sender, GridViewSortEventArgs e)
{

}
protected void grdvDVD_RowCreated(object sender, GridViewRowEventArgs e)
{

if (e.Row.RowType == DataControlRowType.Header)
{
TableCellCollection cells = e.Row.Cells;

foreach (TableCell cell in cells)
{
GenerateScript(cell.Text, grdvDVD);
}
}

}
}
-----------------------------------------------------------------------------------------------------------------

Grazie
Per i paurosi il futuro resterà sconosciuto, per i deboli sarà irraggiungibile, per gli incoscienti offrirà nuove opportunità.

Brainkiller Profilo | Guru

>Rieccomi di nuovo e stavolta e' per un problema sul sorting di
>un gridview.
>Usando il codice sotto riporato ottengo un errore javascript
>e nn riesco a risolvere.

Evidentemente lo script che generi dinamicamente è errato.

Una domanda, cosa dovrebbe fare scusa quel Javascript ?


David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

gandalf_03_75 Profilo | Junior Member

Ciao Brain veramente quella parte di codice l'ho trovata girando per internet e la davano per funzionante ma a me nn fa assolutamente nulla.

Grazie per l'intervento
Per i paurosi il futuro resterà sconosciuto, per i deboli sarà irraggiungibile, per gli incoscienti offrirà nuove opportunità.

Brainkiller Profilo | Guru

>Ciao Brain veramente quella parte di codice l'ho trovata girando
>per internet e la davano per funzionante ma a me nn fa assolutamente
>nulla.

Ok ma cosa dovrebbe fare ?

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

gandalf_03_75 Profilo | Junior Member

Prova a dare un'occhiata qui

http://geekswithblogs.net/azamsharp/archive/2006/04/28/76634.aspx

Ciao
Per i paurosi il futuro resterà sconosciuto, per i deboli sarà irraggiungibile, per gli incoscienti offrirà nuove opportunità.

Brainkiller Profilo | Guru

>Prova a dare un'occhiata qui

Non ho proprio idea di cosa faccia. A me parte che ti consenta di ordinare le colonne di una Gridview, ma la Gridvew 2.0 implementa già nativamente il reording dei valori di tutte le colonne e lo fa inoltre in modo egregio, quindi non saprei a cosa possa servire questo codice.
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

gandalf_03_75 Profilo | Junior Member

Brain alla fine ho optato per quest'altra soluzione che funziona bene

----------------------------------------------------------------------------------------------------------------
public SortDirection GridViewSortDirection
{

get

{

if (ViewState["sortDirection"] == null)

ViewState["sortDirection"] = SortDirection.Ascending;

return (SortDirection) ViewState["sortDirection"];

}

set { ViewState["sortDirection"] = value; }

}


protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{

string sortExpression = e.SortExpression;

if (GridViewSortDirection == SortDirection.Ascending)

{

GridViewSortDirection = SortDirection.Descending;

SortGridView(sortExpression, DESCENDING);

}

else

{

GridViewSortDirection = SortDirection.Ascending;

SortGridView(sortExpression, ASCENDING);

}

}


private void SortGridView(string sortExpression,string direction)
{

// You can cache the DataTable for improving performance

DataTable dt = GetData().Tables[0];

DataView dv = new DataView(dt);

dv.Sort = sortExpression + direction;

GridView1.DataSource = dv;

GridView1.DataBind();

}


----------------------------------------------------------------------------------------------------------------

Spero che possa essere di aiuto a qualcuno.

Grazie ancora per essere intervenuto



Per i paurosi il futuro resterà sconosciuto, per i deboli sarà irraggiungibile, per gli incoscienti offrirà nuove opportunità.

Brainkiller Profilo | Guru

>Brain alla fine ho optato per quest'altra soluzione che funziona
>bene

Appunto già meglio, la Gridview è stata creata per funzionare così. Anche se in realtà ripeto, il Sorting è già pronto out of the box, non bisognerebbe scrivere una linea di codice facendo uso di un AccessDataSource o SqlDataSource. Basta impostare l'AllowSorting a true e già funziona.
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

kontimatteo Profilo | Newbie

Io ho il problema che il sorting automatico del signor Bill funziona, ma funziona sull' sqldatasource che carico all'avvio della pagina e non su un sqlsatasource impostato da me... Mi spiego se ad un certo punto del codice io decido di imporre delle clausule where alla mia select e quindi alla mia griglia al momento di un successivo sorting mi si azzera tutto, ordinandi quindi la griglia basata sui dati nativi... Come posso ovviare? Grazie.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5