如何用C#中的漂亮表格格式表示数据?

时间:2017-02-07 07:48:46

标签: c# .net botframework string.format

我已经编写了以下代码来显示数据

connection.Open();
SqlDataReader reader = command.ExecuteReader();
result += "--------------------------------------------------------------------------------------------------------\n\n";
result += "Product Name\t|\tCost Price\t|\tSold Quantity\t|\tSales Amount\t|\tNet Amount\t|\tProfit\t|\tSale Date\n\n";
result += "--------------------------------------------------------------------------------------------------------\n\n";
while (reader.Read())
{
        result += String.Format("{0}\t|\t{1}\t|\t{2}\t|\t{3}\t|\t{4}\t|\t{5}\t|\t{6:d}\n\n", reader[0], reader[1], reader[2], reader[3], reader[4], reader[5], reader[6]);
}
        result += "--------------------------------------------------------------------------------------------------------\n\n";
reader.Close();

并且,它将数据显示为:

enter image description here

如何改善它以便正确显示?

1 个答案:

答案 0 :(得分:3)

我认为这是一个控制台应用程序,因此无法使用数据网格。

因此,您需要确定每个字段的大小,然后根据相应的数据将字符串填充到正确的长度。

根据数据类型的不同,您可能需要向左或向右填充。

为了帮助您,您可以使用;

String.PadLeft
String.PadRight 

微软网站有更多详细信息; Padding Strings in the .NET Framework

以下是一个示例,您可能需要稍微调整代码。

 string[] fields = new string[] { "Product Name", "Cost Price", "Sold Quantity", "Sales Amount", "Net Amount", " Profit", "Sale Date" };

    StringBuilder sb = new StringBuilder();
    string fieldSeperator = "\t|";
    foreach (String h in fields)
        sb.Append(h + fieldSeperator);

    sb.Append(Environment.NewLine);

    while (reader.Read())
    {
        foreach(string fieldName in fields)
        {
            switch (fieldName)
            {
                case "Product Name":    sb.Append(reader[0].PadRight(fieldName.Length));
                    break;
                case "Cost Price":      sb.Append(reader[1].PadRight(fieldName.Length));
                    break;
                case "Sold Quantity":   sb.Append(reader[2].PadRight(fieldName.Length));
                    break;
                case "Sales Amount":    sb.Append(reader[3].PadRight(fieldName.Length));
                    break;
                case "Net Amount":      sb.Append(reader[4].PadRight(fieldName.Length));
                    break;
                case " Profit":          sb.Append(reader[5].PadRight(fieldName.Length));
                    break;
                case "Sale Date":       sb.Append(reader[6].PadRight(fieldName.Length));
                    break;

            }                    
            sb.Append(fieldSeperator);                    
        }
        sb.Append(Environment.NewLine);
    }

    result = sb.ToString();

请注意,我使用了StringBuilder,因为这样会更好。

这假设您的字段名称与数据的长度或大小相同。如果情况不是这样,那么"利润"然后,这将略微抛出格式。所以在这种情况下,我在字段名称的前面添加了一个额外的空格,我也需要在switch语句中。