在 C 上修复了 System.Data 表数据类型#

System.Data tables data type fix on C#

提问人:Alexander 提问时间:9/6/2021 更新时间:9/7/2021 访问量:273

问:

我在system.data表中遇到了一个问题,我想打印出每列的每一行,但是我找不到一种方法来为混合数据类型(例如表中包含的数据类型)添加此值。

以下是相关代码片段:

table.Rows[0].Field<int>(i)

这需要字段分类器后面的日期类型,但如果它的 int 或字符串会破坏我的代码,我需要一个既适用于又适用于 bool 的解决方案。 这是整个班级:

public DataTable MakeTable()
{
    using (DataTable table = new DataTable())
    {
        table.Columns.Add("ID", typeof(int));
        table.Columns.Add("First Name", typeof(string));
        table.Columns.Add("Surname", typeof(string));
        table.Columns.Add("Permanent?", typeof(bool));
        table.Columns.Add("Salary", typeof(int));
        table.Columns.Add("Bonus", typeof(int));
        table.Columns.Add("Day Rate", typeof(int));
        table.Columns.Add("Weeks Worked", typeof(int));

        table.Rows.Add(1, "Joe", "Bloggs", true, 40000, 5000, null, null);
        table.Rows.Add(2, "John", "Smith", true, 45000, 2500, null, null);
        table.Rows.Add(3, "Clare", "Jones", false, null, null, 350, 40);
        

        int x = 0;
        for (int i = 0; i < 8; i++)
        {
            Console.WriteLine(table.Columns[i].ColumnName + ":  " + table.Rows[0].Field<int>(i));
            Console.WriteLine();
            if (i == 4)
            {
                x++;
                if (x == 3)
                {
                    Console.WriteLine("BREAK");
                    break;
                }
                i = -1;
            }
            Console.WriteLine("\n");
                
        }
        return table;
    }
}

有什么建议吗?

非常感谢提前一整天都坚持下去,但无济于事。

C# 可视化工作室 net-core system.data

评论

3赞 Jeroen Mostert 9/6/2021
table.Rows[0][i]为您提供该字段作为 . 是后来添加的扩展方法,正是因为您通常希望键入它。objectField
0赞 Steve 9/6/2021
此外,您始终打印第一行表。Rows[0] 我想你需要在表上添加另一个循环。Columns.Count,并且行上的循环(索引器 i)将失败,因为您没有 8 行(也不是 4 行)
0赞 Alexander 9/6/2021
@JeroenMostert 谢谢,所以我可以删除 .Field<int> 完全?

答:

2赞 Jiale Xue - MSFT 9/7/2021 #1

@Alexander

您可以按如下方式打印数据:

  1. 桌子。Rows[i][j] //表示第 i 行和第 j 列。
  2. 桌子。Rows[i][“j”] //表示第i行中列名为j的数据。

修改版本:

for (int i = 0, x = 0 ;x< 3; i++) {
     if (i == 8) {
         x++;
         Console.WriteLine("\n");
         i = -1;
         continue;
      }
      Console.WriteLine(table.Columns[i].ColumnName + ":  " + table.Rows[x][i]);
}

输出结果:

enter image description here

我的演示:

foreach (DataRow dr in table.Rows) {
Console.Write("ID:{0,-3} First Name:{1,-5} Surname:{2,-8} Permanent?:{3,-6} Salary:{4,-5} Bonus:{5,-5} Day Rate:{6,-5} Weeks Worked:{7,-5}"//输出格式
, dr["ID"], dr["First Name"], dr["Surname"], dr["Permanent?"], dr["Salary"], dr["Bonus"], dr["Day Rate"], dr["Weeks Worked"]);
Console.WriteLine();
}

输出结果:

enter image description here