заполнение строк для равномерно настроенных столбцов - PullRequest
0 голосов
/ 14 ноября 2010

Хорошо, мне довольно стыдно, я пишу о помощи с этим, но здесь вы идете. Мне просто нужно отобразить некоторые данные в 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 ]

1 голос
/ 14 ноября 2010

Шрифт, который вы используете для выпадающего списка, является проблемой здесь. Ваш код предполагает, что каждый символ в строках будет иметь одинаковую ширину. Это верно только для фиксированных шрифтов, таких как Courier New или Consolas. 2-й столбец все еще работает, потому что 1-й столбец содержит только строки с цифрами. Многие шрифты, но не все, дают цифры той же ширины, что и пробел. Это идет не так для 3-го столбца, потому что 2-й содержит буквы. М нужно гораздо больше места, чем я.

Изменить шрифт. Некоторые элементы управления поддерживают использование вкладки для выравнивания текста, по вашим тегам я не могу сказать, применимо ли это.

0 голосов
/ 14 ноября 2010
60 +(maxd3 - dd.Data3.Length), 

???

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...