Oggi ho aggiunto una piccola modifica al mio RepeaterPlus, modifica che chiude un bug abbastanza significativo; questa permette infatti di gestire più valori di querystring passati all'url della pagina corrente.
Questo fa si che con un url del tipo: pagina.aspx?key=peppe, tutti i link della paginazione mantengano la querystring "key" ed aggiungano quella utile alla paginazione (Es: pagina.aspx?key=peppe&page=1).
Prima di tutto, nel metodo OnLoad del controllo leggo tutti i paremtetri di querystring della pagina corrente e li salvo in un oggetto di tipo HashTable ...
Hashtable queryStringList = new Hashtable();
if(this.Page.Request.QueryString.AllKeys != null)
{
foreach(string s in this.Page.Request.QueryString.AllKeys)
{
queryStringList.Add(s, this.Page.Request.QueryString[s]);
}
}
poi mi sono creato un semplice metodo che aggiunge all'url della pagina corrente, tutti i parametri di querystring e il parametro utile alla paginazione, stando attenti però a non inserirlo se gia presente nell'url. Il metodo risulta una cosa di questo genere:
private string GetAllQueryString(int pageNumber)
{
StringBuilder sb = new StringBuilder();
IDictionaryEnumerator myEnumerator = this.queryStringList.GetEnumerator();
int count = 0;
while(myEnumerator.MoveNext())
{
if(!myEnumerator.Key.ToString().ToLower().Equals(this.pagingParameterName.ToLower()))
{
if(count == 0)
sb.AppendFormat("{0}={1}", myEnumerator.Key, myEnumerator.Value);
else
sb.AppendFormat("&{0}={1}", myEnumerator.Key, myEnumerator.Value);
count += 1;
}
}
if(this.queryStringList.Count != 0)
sb.AppendFormat("&{0}={1}", this.pagingParameterName, pageNumber.ToString());
else
sb.AppendFormat("{0}={1}", this.pagingParameterName, pageNumber.ToString());
return sb.ToString();
}
Ho uppato sia la libreria che la demo on-line aggiornate.