打印DataTable的内容

Wil*_*iam 22 c# sql-server datatable

目前,我有通过SQL连接查找数据库表的代码,并将前五行插入Datatable(表).

using(SqlCommand _cmd = new SqlCommand(queryStatement, _con))
{
    DataTable Table = new DataTable("TestTable");

    SqlDataAdapter _dap = new SqlDataAdapter(_cmd);

    _con.Open();
    _dap.Fill(Table);
    _con.Close();
}
Run Code Online (Sandbox Code Playgroud)

然后,我如何将此表的内容打印到控制台供用户查看?

在挖掘之后,我是否可能将内容绑定到列表视图,或者有没有办法直接打印它们?我不关心现阶段的设计,只关心数据.

任何指针都会很棒,谢谢!

Ars*_*had 36

你可以试试这段代码:

foreach (DataRow dataRow in Table.Rows)
  {
   foreach (var item in dataRow.ItemArray)
   {
    Console.WriteLine(item);
   }
  }
Run Code Online (Sandbox Code Playgroud)

更新1

 DataTable Table = new DataTable("TestTable");
 using(SqlCommand _cmd = new SqlCommand(queryStatement, _con))
    {        
       SqlDataAdapter _dap = new SqlDataAdapter(_cmd);
       _con.Open();
       _dap.Fill(Table);
       _con.Close();

      }
 Console.WriteLine(Table.Rows.Count);  
 foreach (DataRow dataRow in Table.Rows)
      {
       foreach (var item in dataRow.ItemArray)
       {
        Console.WriteLine(item);
       }
      }
Run Code Online (Sandbox Code Playgroud)


小智 11

正确的表格显示

static void print_results(DataTable data)
    {
        Console.WriteLine();
        Dictionary<string, int> colWidths = new Dictionary<string, int>();

        foreach (DataColumn col in data.Columns)
        {
            Console.Write(col.ColumnName);
            var maxLabelSize = data.Rows.OfType<DataRow>()
                    .Select(m => (m.Field<object>(col.ColumnName)?.ToString() ?? "").Length)
                    .OrderByDescending(m => m).FirstOrDefault();

            colWidths.Add(col.ColumnName, maxLabelSize);
            for (int i = 0; i < maxLabelSize - col.ColumnName.Length + 10; i++) Console.Write(" ");
        }

        Console.WriteLine();

        foreach (DataRow dataRow in data.Rows)
        {
            for (int j = 0; j < dataRow.ItemArray.Length; j++)
            {
                Console.Write(dataRow.ItemArray[j]);
                for (int i = 0; i < colWidths[data.Columns[j].ColumnName] - dataRow.ItemArray[j].ToString().Length + 10; i++) Console.Write(" ");
            }
            Console.WriteLine();
        }
    }
Run Code Online (Sandbox Code Playgroud)


Rus*_*man 9

这是将表转储为逗号分隔字符串的另一种解决方案:

using System.Data;

public static string DumpDataTable(DataTable table)
        {
            string data = string.Empty;
            StringBuilder sb = new StringBuilder();

            if (null != table && null != table.Rows)
            {
                foreach (DataRow dataRow in table.Rows)
                {
                    foreach (var item in dataRow.ItemArray)
                    {
                        sb.Append(item);
                        sb.Append(',');
                    }
                    sb.AppendLine();
                }

                data = sb.ToString();
            }
            return data;
        }
Run Code Online (Sandbox Code Playgroud)


Dav*_*err 6

使用以下扩展方法 (C# 9.0):

/// <summary>
/// Provides extension methods for the <see cref="DataTable"/> type.
/// </summary>
public static class DataTableExtensions
{
    /// <summary>
    /// Generates a textual representation of the data of <paramref name="table"/>.
    /// </summary>
    /// <param name="table">The table to print.</param>
    /// <returns>A textual representation of the data of <paramref name="table"/>.</returns>
    public static String Print(this DataTable table)
    {
        String GetCellValueAsString(DataRow row, DataColumn column)
        {
            var cellValue = row[column];
            var cellValueAsString = cellValue is null or DBNull ? "{{null}}" : cellValue.ToString();

            return cellValueAsString;
        }

        var columnWidths = new Dictionary<DataColumn, Int32>();

        foreach (DataColumn column in table.Columns)
        {
            columnWidths.Add(column, column.ColumnName.Length);
        }

        foreach (DataRow row in table.Rows)
        {
            foreach (DataColumn column in table.Columns)
            {
                columnWidths[column] = Math.Max(columnWidths[column], GetCellValueAsString(row, column).Length);
            }
        }

        var resultBuilder = new StringBuilder();

        resultBuilder.Append("| ");

        foreach (DataColumn column in table.Columns)
        {
            resultBuilder.Append(column.ColumnName.PadRight(columnWidths[column]));
            resultBuilder.Append(" | ");
        }

        resultBuilder.AppendLine();

        foreach (DataRow row in table.Rows)
        {
            resultBuilder.Append("| ");

            foreach (DataColumn column in table.Columns)
            {
                resultBuilder.Append(GetCellValueAsString(row, column).PadRight(columnWidths[column]));
                resultBuilder.Append(" | ");
            }

            resultBuilder.AppendLine();
        }

        return resultBuilder.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)


Dea*_*n P 5

foreach (DataRow dr in myDataTable.Rows)
{
    foreach (var item in dr.ItemArray)
    {
        Console.Write(item + " ");
    }
    Console.WriteLine();
}
Run Code Online (Sandbox Code Playgroud)

1之前的答案与此类似,但没有清晰地格式化行条目和单元格之间的分隔