2017-02-07 16 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. И чтобы «улучшить» означает, я хочу, чтобы он выглядел как таблица, так что каждая строка должна отображаться как в ячейке. – Spidy776

ответ

3

Я предполагаю, что это консольное приложение, поэтому datagrid невозможно.

Таким образом, вам нужно определить размер каждого поля, а затем для соответствующих данных вам нужно выровнять строку до нужной длины.

В зависимости от типа данных вы можете захотеть поместить влево или вправо.

Чтобы помочь вам, вы можете использовать;

String.PadLeft 
String.PadRight 

Сайт Microsoft содержит более подробную информацию об этом; 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

Он отлично работает в окне консоли, но не отображает на ботовую инфраструктуру – Spidy776

 Смежные вопросы

  • Нет связанных вопросов^_^