用于均匀调整列的字符串填充

时间:2010-11-14 02:43:27

标签: c# string

好的我很惭愧我正在寻求帮助,但是你走了。我只需要在下拉列表中的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));

            }

2 个答案:

答案 0 :(得分:1)

用于下拉列表的字体是此处的问题。您的代码假定字符串中的每个字符都具有相同的宽度。这仅适用于Courier New或Consolas等固定音调字体。第二列仍然有效,因为第一列只包含带数字的字符串。许多字体(但不是全部)给出的数字与空格的宽度相同。第3列出错了,因为第2列包含字母。 M需要比I更多的空间。

更改字体。有些控件支持使用选项卡来对齐文本,我无法从您的标签中判断是否适用。

答案 1 :(得分:0)

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

???