C # DataTable Показать одну строку в консоли - PullRequest
1 голос
/ 23 сентября 2019

Я искал верхний и нижний значения метода для отображения всей строки данных C #, ссылаясь на номер строки и просто записывая содержимое строки в строковую переменную и показывая строку в консоли.Я могу указать точное значение строки и поля и отобразить это значение, но не всю строку.Это не список в C #, это таблица данных.

Для простого кода, приведенного ниже, вывод, который я получаю для первого WriteLine, это «Horse», но для двух других команд WriteLine я получаю вывод консоли«System.Data.DataRow» вместо всей строки данных.

Что я делаю не так?Любая помощь будет оценена.

using System;
using System.Data;
using System.Threading;

namespace DataTablePractice
{
    class Program
    {
        static void Main(string[] args)
        {

            // Create a DataTable.
            using (DataTable table = new DataTable())
            {
                // Two columns.
                table.TableName = "table";
                table.Columns.Add("Number", typeof(string));
                table.Columns.Add("Pet", typeof(string));

                // ... Add two rows.
                table.Rows.Add("4", "Horse");
                table.Rows.Add("10", "Moose");

                // ... Display first field of the first row in the console
                Console.WriteLine(table.Rows[0].Field<string>(1));

                //...Display the first row of the table in the console
                Console.WriteLine(table.Rows[0]);

                //...Create a new row variable to add a third pet
                var newrow = table.Rows.Add("15", "Snake");
                string NewRowString = newrow.ToString();

                //...Display the new row of data in the console
                Console.WriteLine(NewRowString);

                //...Sleep for a few seconds to examine output
                Thread.Sleep(4000);

            }
        }
    }
}

1 Ответ

1 голос
/ 23 сентября 2019

Когда вы запускаете это:

Console.WriteLine(table.Rows[0]);

Это фактически вызывает это:

Console.WriteLine(table.Rows[0].ToString());  // prints object type, in this case a DataRow

Если бы это был ваш собственный класс, вы могли бы переопределить ToString дляверните все, что вам нужно, но у вас нет этой опции с классом DataRow.И поэтому он использует поведение по умолчанию, как описано здесь :

Реализации по умолчанию метода Object.ToString возвращают полностью определенное имя типа объекта.

Вы можете перебирать столбцы, например, так:

var row = table.Rows[0];
for (var i = 0; i < row.Count; i++)
    Console.Write(row[i] + " : ");

Или, более короткий способ распечатать их все:

Console.WriteLine(String.Join(" : ", table.Rows[0].ItemArray));

Учитывая ваши данные, возможно, выпросто хотите сослаться на два поля?

foreach (DataRow row in dt.Rows)
    Console.WriteLine($"You have {row[0]} {row[1]}(s).");

// You have 4 Horse(s).
// You have 10 Moose(s).
...