2012-12-24 63 views
3

因此,我正在格式化一个字符串,我需要将它排列在一个表中,但此字符串的字符数不确定。无论如何要让每一列的字符串都在同一个位置?到目前为止,我有:带有未定义字符数的字符串格式c#

ostring += "Notes\t\t" 
+ "  : " 
+ employees[number].Notes 
+ "\t\t" 
+ employees[number].FirstNotes 
+ "\t\t" 
+ employees[number].SecondNotes; 

我用同样的方式在其他行,但他们有数字的预定数量,然而,这并不让我不能使用字符串修饰符就像我会喜欢。

什么我需要做的任何想法?

+1

如果你绝对必须正确排列它们,并且尺寸未知,那么你可以做的唯一的事情就是遍历所有的值,并找出最大尺寸是多少。 – Jon

+0

什么是你把数据放入表,一个HTML表? –

+0

您可以使用列表视图来显示这个..// –

回答

5

您可以使用String.PadRight()字符串强制为特定的大小,而不是使用标签。

2

当使用String.Format项目格式有以下语法:

{ index[,alignment][ :formatString] } 

因此可以指定对准指示到其中的参数被插入字段的总长度,以及它是否是正确的对齐(一正整数)或左对齐(负整数)。

而且最好是使用StringBuilder建立字符串:

var builder = new StringBuilder(); 
var employee = employees[number]; 
builder.AppendFormat("Notes {0,20} {1,10} {2,15}", 
    employee.Notes, employee.FirstNotes, employee.SecondNotes); 
0

你必须首先遍历每个条目找到最大的一个,所以你知道锄头宽,使列,是这样的:

var notesWidth = employees.Max(Notes.Length); 
var firstNotesWidth = employees.Max(FirstNotes.Length); 
// etc... 

然后你可以垫列正确宽度:

var output = new StringBuilder(); 
foreach(var employee in employees) 
{ 
    output.Append(employee.Notes.PadRight(notesWidth+1)); 
    output.Append(employee.FirstNotes.PadRight(firstNotesWidth+1)); 
    // etc... 
} 

不要在循环中做很多字符串“加”(“1”+“2”+“3”+ ...)。改为使用StringBuilder。它效率更高。

+0

即时通讯尝试使用.pad正确的方法,但它不工作即时通讯仍然得到像我以前这里是相同的即时通讯正在做:ostring + =“Notes \ t \ t”+“:”; var output = new StringBuilder(); output.Append(雇员[数字] .Notes.PadRight(24)); output.Append(雇员[数字] .FirstNotes.PadRight(34)); ostring + = output + employees [数字] .SecondNotes; ostring + = Environment.NewLine – compprog254

+0

你原来的问题并没有说明你以前有过什么,所以我不知道还有什么可以帮助你。 – CodingWithSpike