Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中用漂亮的表格格式表示数据?_C#_.net_Botframework_String.format - Fatal编程技术网

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

C# 如何在C中用漂亮的表格格式表示数据?,c#,.net,botframework,string.format,C#,.net,Botframework,String.format,我编写了以下代码来显示数据 connection.Open(); SqlDataReader reader = command.ExecuteReader(); result += "--------------------------------------------------------------------------------------------------------\n\n"; result += "Product Name\t|\tCost Price\t|\tSold

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

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();
并且,它将数据显示为:


如何改进它以正确显示?

我假设这是一个控制台应用程序,因此不可能使用datagrid

因此,您需要计算出每个字段的大小,然后对于适当的数据,您需要将字符串填充到正确的长度

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

为了帮助你,你可以使用

String.PadLeft
String.PadRight 
微软网站有更多关于这方面的细节

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

 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语句中也需要这个空格。

为什么不使用datagridView或任何其他控件来实现此目的?改进对您意味着什么?你能说得更具体些吗?查看所有不同格式的字符串,我希望数据作为字符串发送到MicrosoftBot框架中的聊天机器人上显示。为了改进方法,我希望它看起来像一个表,这样每个字符串都应该像在一个单元格中一样出现。它的可能副本在控制台窗口上工作正常,但在bot框架上不会呈现