DataTextField con spazi in DropDownList

mercoledì 06 settembre 2006 - 15.17

l.corallini Profilo | Junior Member

ciao a tutti,

vorrei chiedere se qualcuno ha già affrontato (e spero risolto) il problema che si manifesta quando si popola un DropDownList volendo inserire nel DataTextField dei campi concatenati e degli spazi.
In pratica la query mi restituisce valori del tipo:
1 - S 200 LM - Attenzione
991 - S 400 - Problema Grave
14587 - S 78900 HHLL - Warning Numero 2
e così li visualizzo nel DropDownList, e la cosa non mi piace molto...vorrei piuttosto ottenere un risultato con i valori allineati.
(ho provato ad allinearli usando gli spazi anche in questo thread ma mi sono reso conto che l'effetto è lo stesso dell'esempio precedente...

1 - S 200 LM - Attenzione
991 - S 400 - Problema Grave
14587 - S 78900 HHLL - Warning Numero 2
)
ho provato prima ad inserire delle stinghe contenenti spazi ma senza successo:

*************************************************************************
DataTable dt = new DataTable();

// Define the columns of the table.
dt.Columns.Add(new DataColumn("des", typeof(String)));
dt.Columns.Add(new DataColumn("cod", typeof(String)));
string Cod;
string Vel;

foreach(DataRow dr in Risultato.Tables[0].Rows)
{
Cod="";
Vel="";
//Gestisco gli spazi al campo cod
int lenCod=dr.ItemArray[0].ToString().Length;
for(int i=0;i<5-lenCod;i++)
{
Cod=Cod+"";
}
//Gestisco gli spazi al campo uni_trz
int lenVel=dr.ItemArray[1].ToString().Length;
for(int i=0;i<20-lenVel;i++)
{
Vel=Vel+"";
}
dt.Rows.Add(CreateRow(dr.ItemArray[0].ToString()+Cod+" - "+dr.ItemArray[1].ToString()+Vel+" - "+dr.ItemArray[2].ToString(), dr.ItemArray[0].ToString(), dt));
*************************************************************************

poi ho anche provato ad inserire invece che " " un carattere tipo "#", una volta fatto il Bind al controllo DropDownList ho utilizzato la funzione Replace per tutti gli item ma nulla di fatto:

*************************************************************************
foreach(ListItem li in ddl.Items)
{
li.Text=li.Text.Replace("#"," ");
}
*************************************************************************

ciao

luca


luca

Brainkiller Profilo | Guru

>vorrei chiedere se qualcuno ha già affrontato (e spero risolto)
>il problema che si manifesta quando si popola un DropDownList
>volendo inserire nel DataTextField dei campi concatenati e degli
>spazi.

Devi semplicemente usare un Font a dimensione fissa come il Courier:

1 - S 200 LM - Attenzione 991 - S 400 - Problema Grave 14587 - S 78900 HHLL - Warning Numero 2

come quello che viene usato nei frammenti di codice qui sopra per esempio.

Ciao

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

l.corallini Profilo | Junior Member

questo funziona con qualsiasi carattere?
se provo ad inserire spazio (" ") mi disallinea i dati, cosa che appunto non accade per i caratteri 'visibili'.
ciao
luca

Brainkiller Profilo | Guru

>questo funziona con qualsiasi carattere?
>se provo ad inserire spazio (" ") mi disallinea i dati, cosa
>che appunto non accade per i caratteri 'visibili'.

Non capisco sai ?

Naturalmente sei tu che devi contare quanti spazi vuoti ci devono stare per allinearli perfettamente in verticale. Ma requisito fondamentale è l'uso di un carattere non proporzionale come ti ho anticipato prima tipo il Courier.
Fammi sapere.
ciao

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

l.corallini Profilo | Junior Member

cerco di spiegarmi meglio.
contando correttamente quanti spazi mi servono per allineare il testo a destra e utilizzando il font Courier e inserendo al posto degli spazi un qualsiasi carattere, ad esempio "#" oppure "R" ecc... il testo si allinea perfettamente.
io però non vorrei un dropdownlist con dati in questo modo:

1####-ALMN 450####-Errore 1
2100##-AN##########-Err

ma vorrei al posto del carattere "#" poter inserire lo spazio " ", che però non viene 'scritto'.
sono riuscito a spiegarmi? forse devo usare un codice al posto di " "?
ciao

luca

Brainkiller Profilo | Guru

>ma vorrei al posto del carattere "#" poter inserire lo spazio
>" ", che però non viene 'scritto'.
>sono riuscito a spiegarmi? forse devo usare un codice al posto

Prova ad utilizzare lo spazio e cioè &nbsp; il risultato sarà il seguente:


142x83 2Kb


il codice usato è il seguente:

<html> <body> <select style="font-family:Courier"> <option value="2">142&nbsp;&nbsp;&nbsp;Opzione</option> <option value="2">12&nbsp;&nbsp;&nbsp;&nbsp;Opzione</option> <option value="2">1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Opzione</option> <option value="2">54345&nbsp;Opzione</option> </select> </body> </html>

Saluti

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

l.corallini Profilo | Junior Member

ok ma forse mi manca un passaggio, io ho scritto:
foreach(ListItem li in ddlCluster.Items)
{
li.Text=li.Text.Replace("#","&nbsp;");
}

avendo calcolato, prima di fare il bind dei dati, gli spazi necessari per allineare a destra il testo.
cosa sbaglio?
grazie
ciao
luca

Brainkiller Profilo | Guru

>ok ma forse mi manca un passaggio, io ho scritto:
>avendo calcolato, prima di fare il bind dei dati, gli spazi necessari
>per allineare a destra il testo.
>cosa sbaglio?

Non ho idea, probabilmente sbagli il calcolo degli spazi. L'esempio che ti ho postato è completo e funzionante.
Quindi evidentemente o stai sbagliando il font o il numero degli spazi. Guarda la screenshot che ti ho postato e il codice, parti da lì e vedi di risalire a cosa stai sbagliando.
Ciao

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

l.corallini Profilo | Junior Member

forse non riesco ad ottenere il tuo stesso risultato perchè programmo un server control mentre tu un html control?
comunque inserendo lo spazio con il ciclo sugli elementi del dropdownlist ottengo:


224x258 36Kb


e nel sorgente ho:

<option value=""></option>
<option value="1">1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-VS 250 C 135%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-Errore 1</option>
<option value="2">2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-VS 150 C 135%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-Errore 2</option>
<option value="9">9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-VS 250 P 135%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-Errore 3</option>
<option value="47">47&amp;nbsp;&amp;nbsp;&amp;nbsp;-VS 160 C 135%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-Errore 4</option>

spero di essere stato più chiaro.
ciao

luca

luca

Brainkiller Profilo | Guru

>forse non riesco ad ottenere il tuo stesso risultato perchè programmo
>un server control mentre tu un html control?
>comunque inserendo lo spazio con il ciclo sugli elementi del
>dropdownlist ottengo:

Il Server control viene rimappato su controlli HTML quindi non è questo il problema.

>e nel sorgente ho:

Io ho copiato il tuo sorgente nel mio file e questo è il risultato:


445x67 3Kb


A parte l'ultima riga che c'è un &nbsp; in meno il resto è corretto.
Tu questi dati dove li stai caricando scusa ? in una combo ?
Ciao

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

l.corallini Profilo | Junior Member


>Il Server control viene rimappato su controlli HTML quindi non
>è questo il problema.
ma perchè se io inserisco,come vedi nell'esempio in basso, il carattere '&nbsp;' nel sorgente invece di vedere lo stesso carattere (quindi a video vedo lo spazio) trovo '&amp;nbsp;' ?...


>Io ho copiato il tuo sorgente nel mio file e questo è il risultato:


>A parte l'ultima riga che c'è un   in meno il resto è corretto.
>Tu questi dati dove li stai caricando scusa ? in una combo ?

questo è il metodo che utilizzo per popolare la combo inserendo al posto degli spazi il carattere "#"
*************************************************************************
public DataTable CaricaDropDownList(string cod)
{
string myCmdTxt="";
myCmdTxt = " SELECT ";
myCmdTxt = myCmdTxt+" cod,";
myCmdTxt = myCmdTxt+" cat,";
myCmdTxt = myCmdTxt+" uni, ";
myCmdTxt = myCmdTxt+" '' descrizione ";
myCmdTxt = myCmdTxt+" FROM nso";
myCmdTxt = myCmdTxt+" WHERE cod="+cod;
myCmdTxt = myCmdTxt+" AND flg_vis='S'";
myCmdTxt = myCmdTxt+" ORDER BY cod";
this.myOracleConnection.Open();
OracleDataAdapter userAdapter = new OracleDataAdapter();
userAdapter.SelectCommand = new OracleCommand(myCmdTxt,this.myOracleConnection);
DataSet Risultato = new DataSet("Risultato");
userAdapter.Fill(Risultato,"nso");
this.myOracleConnection.Close();

DataTable dt = new DataTable();

// Define the columns of the table.
dt.Columns.Add(new DataColumn("des", typeof(String)));
dt.Columns.Add(new DataColumn("cod", typeof(String)));
string Cod;
string Vel;
int lenCod;
int lenVel;
int lenVelSpaceLess;
foreach(DataRow dr in Risultato.Tables[0].Rows)
{
Cod="";
Vel="";
lenCod=0;
lenVel=0;
lenVelSpaceLess=0;
//Gestisco gli spazi al campo cod
lenCod=dr.ItemArray[0].ToString().Trim().Length;
for(int i=0;i<5-lenCod;i++)
{
Cod=Cod+"#";
}
//Gestisco gli spazi al campo uni
lenVel=dr.ItemArray[1].ToString().Trim().Length;
lenVelSpaceLess=dr.ItemArray[1].ToString().Replace(" ","").Trim().Length;
for(int i=0;i<20-lenVelSpaceLess;i++)
{
Vel=Vel+"#";
}
dt.Rows.Add(CreateRow(dr.ItemArray[0].ToString()+Cod+"-"+dr.ItemArray[1].ToString()+Vel+"-"+dr.ItemArray[2].ToString(), dr.ItemArray[0].ToString(), dt));
}
return dt;
}
*************************************************************************

qui faccio il bind dei dati e scrivo al posto del carattere "#" lo spazio "&nbsp;"
*************************************************************************
ddl.DataSource = dt;
ddl.DataValueField = "cod";
ddl.DataTextField = "des";
ddl.DataBind();
ddl.Items.Insert(0,"");
foreach(ListItem li in ddl.Items)
{
li.Text=li.Text.Replace("#","&nbsp;");
}
*************************************************************************

purtroppo non capisco perchè non riesco ad ottenere il tuo stesso risultato.
grazie e scusa la mia insistenza nel voler andare fino in fondo alla questione...
luca
luca
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5