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