2017-02-07 70 views
-1

我已經寫了下面的代碼來顯示數據如何在C#中以漂亮的表格格式表示數據?

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

如何改進它才能正常顯示?

+0

爲什麼不使用datagridView或任何其他控件用於此目的? –

+0

「改善」對你意味着什麼?你可以說得更詳細點嗎?查看[String.Format]的所有不同格式字符串(https://msdn.microsoft.com/en-us/library/system.string.format.aspx) – Sentry

+0

我想要數據作爲字符串發送給在Microsoft Bot Framework中的聊天bot上顯示。而「改善」的意思是,我希望它看起來像一個表,以便每個字符串應該出現在單元格中。 – Spidy776

回答

3

我假設這是一個控制檯應用程序,所以datagrid是不可能的。

因此,您需要計算出每個字段的大小,然後爲適當的數據,您需要將字符串填充到正確的長度。

根據數據類型,您可能想要向左或向右墊。

爲了幫助你,你可以使用;

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語句中也是我需要的。

+0

它在控制檯窗口上正常工作,但不會在bot框架上呈現 – Spidy776