2010-11-14 4 views
0

Ok Je suis assez honteux Je poste pour de l'aide avec ça, mais c'est parti. J'ai juste besoin d'afficher des données dans 3 colonnes ajustées uniformément dans la liste déroulante.Rembourrage de cordes pour des colonnes ajustées uniformément

Voici le code pour ajuster le remplissage de chaque chaîne en fonction de la chaîne de longueur maximale. La deuxième colonne semble correcte mais la dernière est désactivée par le décalage de la différence de longueur maximale - longueur de chaîne. Je ne peux pas comprendre pourquoi ...

List<Data> list = new List<Data>(); 

      Data d = new Data() { Data1 = "328989892787", Data2 = "MNJK", Data3="23" }; 
      Data b = new Data() { Data1 = "343567", Data2= "HJKLLL", Data3="2345" }; 
      Data g = new Data() { Data1 = "64737", Data2="UI", Data3="234" }; 
      Data f = new Data() { Data1 = "878437878223245", Data2="", Data3="45653" }; 
      Data a = new Data() { Data1 = "234", Data2 = "DataMe", Data3="1"}; 

      list.Add(d); 
      list.Add(b); 
      list.Add(g); 
      list.Add(f); 
      list.Add(a); 

      var sorted1 = list.OrderByDescending(q => q.Data1.Length).ToList(); 
      var sorted2 = list.OrderByDescending(s => s.Data2.Length).ToList(); 
      var sorted3 = list.OrderByDescending(r => r.Data3.Length).ToList(); 

      int maxd1 = sorted1[0].Data1.Length; 
      int maxd2 = sorted2[0].Data2.Length; 
      int maxd3 = sorted3[0].Data3.Length; 

      ListItem item = null; 
      foreach (var dd in list) 
      { 

       string result = string.Format("{0}{1}{2}", 
        dd.Data1.PadRight(40 + (maxd1 - dd.Data1.Length), '\u00A0'), 
        dd.Data2.PadRight(50 +(maxd2 - dd.Data2.Length), '\u00A0'), 
        dd.Data3); 

       this.DropDownList1.Items.Add(new ListItem(result, dd.Data1)); 

      } 
+0

Pouvez-vous ajouter un exemple de sortie? Pas clair sur ce que "décalage de la différence de longueur max - longueur de la chaîne" ressemble à ... –

+0

@James voici la sortie prise de la liste déroulante: – dexter

+0

Suis-je manquant quelque part? –

Répondre

1

La police que vous utilisez pour la liste déroulante est le problème ici. Votre code suppose que chaque caractère des chaînes aura la même largeur. Cela n'est vrai que pour les polices à virgule fixe comme Courier New ou Consolas. La 2ème colonne fonctionne toujours car la 1ère colonne contient uniquement des chaînes avec des chiffres. De nombreuses polices, mais pas toutes, donnent aux chiffres la même largeur qu'un espace. Cela ne va pas pour la 3ème colonne car la 2ème contient des lettres. Un M a besoin de beaucoup plus d'espace qu'un I.

Changez la police. Certains contrôles prennent en charge l'utilisation d'un onglet pour aligner le texte, je ne peux pas dire à partir de vos balises si cela s'appliquerait.

0
60 +(maxd3 - dd.Data3.Length), 

???

+0

Aucun ne fait aucune différence, et la troisième colonne fait pas besoin d'être bien rembourré puisque c'est la dernière colonne. – dexter