2010-11-14 70 views
0

好吧,我很慚愧我發佈了這個幫助,但在這裏你去。我只需要在下拉列表中的3個均勻調整列中顯示一些數據。字符串填充均勻調整列

以下是根據最大長度的字符串調整每個字符串的填充的代碼。 第二列看起來不錯,但最後一列是由最大長度 - 字符串長度差異的偏移量關閉的。我無法弄清楚,爲什麼...

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

你可以添加一些示例輸出嗎?不清楚什麼「最大長度差異的偏移量 - 字符串長度」看起來像... – 2010-11-14 04:29:55

+0

@詹姆斯這裏是從下拉列表中取得的輸出: – dexter 2010-11-14 22:08:46

+0

我是否在某處丟失了它? – 2010-11-15 01:58:21

回答

1

您在下拉菜單中使用的字體是此處的問題。您的代碼假定字符串中的每個字符都具有相同的寬度。這隻適用於像Courier New或Consolas這樣的固定字體的字體。第二列仍然有效,因爲第一列只包含帶數字的字符串。許多字體,但不是全部,給數字與空間相同的寬度。第三列出錯,因爲第二列包含字母。 M需要比I更多的空間。

更改字體。有些控件支持使用標籤來對齊文本,如果適用的話,我無法從標籤中知道。

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

???

+0

沒有沒有什麼區別,第三列因爲它是最後一列,所以不需要正確填充。 – dexter 2010-11-14 22:04:37