代碼段——關於控制檯打印DataTable

0.背景說明

最近頻繁使用DataTable對象,整理關於DataTable的一些方法,需要調試打印處理,故編寫一個比較工整的打印方法

1.代碼段


/// <summary>
/// 控制檯輸出DataTable
/// </summary>
/// <param name="dt">目標DataTable</param>
/// <param name="title">DataTable的標題</param>
private static void PrintDataTable(DataTable dt, string title)
{
    Console.ForegroundColor = ConsoleColor.Green;
    Console.WriteLine($"{title}");
    //拼接列頭
    string colName = "";
    foreach (DataColumn column in dt.Columns)
    {
        colName += "|" + PadRightEx(column.ColumnName, 20);
    }
    Console.WriteLine(colName);
    Console.WriteLine("--------------------------------------------------------------------------------------------------------");
    //循環打印每一行
    foreach (DataRow row in dt.Rows)
    {
        //拼接行數據
        string strRow = "";
        foreach (var item in row.ItemArray)
        {
            strRow += "|" + PadRightEx(item.ToString(), 20);
        }
        Console.WriteLine(strRow);
    }
    Console.WriteLine("");
}

/// <summary>
/// 用空格將字符串拼接到指定的長度
/// 參考:https://www.cnblogs.com/chenjiahong/articles/2705437.html
/// 中文和英文字符佔位寬度不一樣,進行調整
/// </summary>
/// <param name="str">目標字符串</param>
/// <param name="totalByteCount">拼接後的字符串長度</param>
/// <returns></returns>
private static string PadRightEx(string str, int totalByteCount)
{
    Encoding coding = Encoding.GetEncoding("gb2312");
    int dcount = 0;
    foreach (char ch in str.ToCharArray())
    {
        if (coding.GetByteCount(ch.ToString()) == 2)
            dcount++;
    }
    string w = str.PadRight(totalByteCount - dcount);
    return w;
}

2. 測試

//構建測試數據
private static DataTable GetDataTable()
{
    DataTable dt = new DataTable("Student");
    DataColumn dcId = new DataColumn("Id", typeof(int));
    DataColumn dcName = new DataColumn("Name", typeof(string));
    DataColumn dcAge = new DataColumn("Age", typeof(int));
    DataColumn dcGender = new DataColumn("Gender", typeof(bool));
    DataColumn dcCreateTime = new DataColumn("CreateTime", typeof(DateTime));
    DataColumn[] dataColumns = new DataColumn[] { dcId, dcName, dcAge, dcGender, dcCreateTime };
    dt.Columns.AddRange(dataColumns);
    dt.Rows.Add(1, "'張三'", 17, false, "2023-9-27 20:10:00");
    dt.Rows.Add(2, "李四", 18, true, "2023-8-27 20:10:00");
    dt.Rows.Add(3, "王五", 19, false, "2023-7-27 20:10:00");
    dt.Rows.Add(4, "趙六", 19, true, "2023-6-27 20:10:00");
    dt.Rows.Add(5, "錢七", 20, false, "2023-5-27 20:10:00");
    dt.Rows.Add(6, "孫八", 21, false, "2023-4-27 20:10:00");
    return dt;
}

private static void Main(string[] args)
{

    DataTable dt = GetDataTable();
    PrintDataTable(dt, "打印Student表");
    Console.ReadKey();
}
打印Student表
|Id                  |Name                |Age                 |Gender              |CreateTime
--------------------------------------------------------------------------------------------------------
|1                   |'張三'              |17                  |False               |2023-09-27 20:10:00
|2                   |李四                |18                  |True                |2023-08-27 20:10:00
|3                   |王五                |19                  |False               |2023-07-27 20:10:00
|4                   |趙六                |19                  |True                |2023-06-27 20:10:00
|5                   |錢七                |20                  |False               |2023-05-27 20:10:00
|6                   |孫八                |21                  |False               |2023-04-27 20:10:00



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章