C# 设置控制台窗口中显示数据的格式(正确)

C# 设置控制台窗口中显示数据的格式(正确),c#,sql,visual-studio,C#,Sql,Visual Studio,我正在学习在控制台窗口中从Sql数据库显示数据库中的数据,建立了连接,问题是我显示的数据不统一/整洁。有办法解决这个问题吗 代码* 我想数据显示对齐和整齐。 提前感谢您可以使用填充来正确对齐输出 计算出每列所需的宽度,然后相应地填充字符串: var value = "Sample"; //Desired length var length = 20; //Trim strings longer than the desired length value = (value.Length &g

我正在学习在控制台窗口中从Sql数据库显示数据库中的数据,建立了连接,问题是我显示的数据不统一/整洁。有办法解决这个问题吗

代码*

我想数据显示对齐和整齐。
提前感谢

您可以使用填充来正确对齐输出

计算出每列所需的宽度,然后相应地填充字符串:

var value = "Sample";

//Desired length
var length = 20;

//Trim strings longer than the desired length
value = (value.Length > length) ? $"{value.Substring(0,20)}..." : value;

//Pad to always have the same length
var paddedValue = value.PadRight(length, ' ');
在上面的示例中,
paddedValue
将包含一个开头带有
Sample
的字符串和14个额外的空格

您可以阅读有关字符串填充的更多信息

这是一个简单的示例,但您应该清楚,可以将其封装到可重用的函数/类中

下面是一个使用数组的示例实现。您可以创建一个用于修剪/填充字符串的函数:

private static string GetFormattedValue(string value, int maxLength)
{
    //Trim strings longer than the desired length
    var output = (value.Length > maxLength) ? $"{value.Substring(0, 20)}..." : value;
    //Pad to always have the same length
    var paddedValue = output.PadRight(maxLength, ' ');
    return paddedValue;
}
以下是一些示例定义和数据:

var lengths = new[] { 20, 30, 10 }; 
var headers = new[] { "Title", "Description Header that is also too long", "Quantity" };
var values = new[] {"Small text", "Super long text that will not fit", "15" };
使用Linq为头和值生成字符串(头也可能太长!):

输出:


您可以使用填充来正确对齐输出

计算出每列所需的宽度,然后相应地填充字符串:

var value = "Sample";

//Desired length
var length = 20;

//Trim strings longer than the desired length
value = (value.Length > length) ? $"{value.Substring(0,20)}..." : value;

//Pad to always have the same length
var paddedValue = value.PadRight(length, ' ');
在上面的示例中,
paddedValue
将包含一个开头带有
Sample
的字符串和14个额外的空格

您可以阅读有关字符串填充的更多信息

这是一个简单的示例,但您应该清楚,可以将其封装到可重用的函数/类中

下面是一个使用数组的示例实现。您可以创建一个用于修剪/填充字符串的函数:

private static string GetFormattedValue(string value, int maxLength)
{
    //Trim strings longer than the desired length
    var output = (value.Length > maxLength) ? $"{value.Substring(0, 20)}..." : value;
    //Pad to always have the same length
    var paddedValue = output.PadRight(maxLength, ' ');
    return paddedValue;
}
以下是一些示例定义和数据:

var lengths = new[] { 20, 30, 10 }; 
var headers = new[] { "Title", "Description Header that is also too long", "Quantity" };
var values = new[] {"Small text", "Super long text that will not fit", "15" };
使用Linq为头和值生成字符串(头也可能太长!):

输出:


没有尝试,但这应该能起作用。它在读卡器[0]的右侧填充空格,以达到指定的总长度

int totalLength = 50;
Console.WriteLine(reader[0].PadRight(totalLength) + String.Format(" \t | {1} \t\t | {2} \t | {3} \t | {4} \t | ", reader[1], reader[2], reader[3], reader[4], reader[5]));

没有尝试,但这应该是一种工作。它在读卡器[0]的右侧填充空格,以达到指定的总长度

int totalLength = 50;
Console.WriteLine(reader[0].PadRight(totalLength) + String.Format(" \t | {1} \t\t | {2} \t | {3} \t | {4} \t | ", reader[1], reader[2], reader[3], reader[4], reader[5]));

正如您所做的那样,表格可用于正确对齐列。但是如果单元格的内容太大,对齐就会中断,即下面示例中的值
second
将列推得太远:

C1    | C2
first | a
second    | b
third | b
此外,您无法控制一个选项卡的空格数。这是一个用户设置。它可以是2、4、8或其他任何值

另一种解决方案是使用填充来控制每列的确切字符数(包括空格)。但是如果一个单元格内容太大,同样的问题也会出现

因此,正确的解决方案是使用带省略号的填充,如
文本溢出:省略号用于HTML/CSS呈现

假设所有列宽为10个字符,如果单元格内容值太大,则需要“剪切”该值,如示例所示:

C1        | C2
long      | a
verylong  | b
veryvery..| b

正如您所做的那样,表格可用于正确对齐列。但是如果单元格的内容太大,对齐就会中断,即下面示例中的值
second
将列推得太远:

C1    | C2
first | a
second    | b
third | b
此外,您无法控制一个选项卡的空格数。这是一个用户设置。它可以是2、4、8或其他任何值

另一种解决方案是使用填充来控制每列的确切字符数(包括空格)。但是如果一个单元格内容太大,同样的问题也会出现

因此,正确的解决方案是使用带省略号的填充,如
文本溢出:省略号用于HTML/CSS呈现

假设所有列宽为10个字符,如果单元格内容值太大,则需要“剪切”该值,如示例所示:

C1        | C2
long      | a
verylong  | b
veryvery..| b

您可以尝试使用以下代码来使用打包类以 桌子

类程序
{
静态void Main(字符串[]参数)
{
var t=新的表格打印机(“Id”、“名称”、“年龄”);
字符串connectionstring=“connectionstring”;
SqlConnection连接=新的SqlConnection(connectionstring);
connection.Open();
string sql=“选择*来自学生”;
SqlCommand=新的SqlCommand(sql,连接);
SqlDataReader=command.ExecuteReader();
while(reader.Read())
{
t、 AddRow(读卡器[“Id”]、读卡器[“名称”]、读卡器[“年龄”]);
}
t、 打印();
Console.ReadKey();
}
}
公共类台式打印机
{
私有只读字符串[]标题;
私有只读列表长度;
私有只读列表行=新列表();
公用表格打印机(参数字符串[]标题)
{
this.titles=标题;
长度=标题。选择(t=>t.Length.ToList();
}
public void AddRow(参数对象[]行)
{
if(row.Length!=titles.Length)
{
抛出新的System.Exception($“添加的行长度[{row.length}]不等于标题行长度[{titles.length}]”);
}
添加(row.Select(o=>o.ToString()).ToArray());
for(int i=0;iLength[i])
{
长度[i]=行。最后一个()[i]。长度;
}
}
}
公开作废印刷品()
{
length.ForEach(l=>System.Console.Write(“+-”+新字符串('-',l)+'-');
System.Console.WriteLine(“+”);
字符串行=”;
for(int i=0;iSystem.Console.Write(“+-”+新字符串('-',l)+'-');
System.Console.WriteLine(“+”);
foreach(行中的变量行)
{
第“”行;
for(int i=0;i