c# 动态创建DataTable
有个题卡住了,我想在循环内去创建一个DataTable,创建列,行之类的
现在生成的都是同一列(见下图),在列数不确定的情况下,如何能在写完一列后,将数据写在另一列?
static void Main(string[] args)
{
var dt = Create();
Console.ReadKey();
}
static DataTable Create()
{
DataTable dt = new DataTable();
for (int i = 0; i < 5; i++)
{
dt.Columns.Add("A" + i);
dt.Rows.Add((i + 1).ToString());
}
return dt;
}
https://s3.bmp.ovh/imgs/2022/03/9aebf70bb0005ecc.png
dt_detail = new DataTable();
dt_detail.Columns.Add(new DataColumn("type", typeof(string)));
dt_detail.Columns.Add(new DataColumn("uid", typeof(string)));
dt_detail.Columns.Add(new DataColumn("douyin", typeof(string)));
dt_detail.Columns.Add(new DataColumn("nickname", typeof(string)));
dt_detail.Columns.Add(new DataColumn("gender", typeof(string)));
dt_detail.Columns.Add(new DataColumn("fans", typeof(string)));
dt_detail.Columns.Add(new DataColumn("follow", typeof(string)));
dt_detail.Columns.Add(new DataColumn("city", typeof(string)));
dt_detail.Columns.Add(new DataColumn("qrcode", typeof(string)));
dt_detail.Columns.Add(new DataColumn("count", typeof(string)));
dt_detail.Columns.Add(new DataColumn("time", typeof(string)));
dt_detail.Columns.Add(new DataColumn("remark", typeof(string)));
var dr = dt_detail.NewRow();
dr["type"] = u.type;
dr["uid"] = u.uid;
dr["douyin"] = u.douyin;
dr["nickname"] = u.nickname;
dr["gender"] = u.gender;
dr["fans"] = u.fans;
dr["follow"] = u.follow;
dr["city"] = u.city;
dr["count"] = 1;
dr["time"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
dr["remark"] = u.remark;
dt_detail.Rows.Add(dr); xiaovssha 发表于 2022-3-27 22:00
dt_detail = new DataTable();
dt_detail.Columns.Add ...
我觉得我的想法可能有点复杂,我的DataTable需求是一列一列生成的,而不是一行一行生成的 dt.Rows.Add((i + 1).ToString());
这句话的意思是增加一个新行,并且每行的第一列是i+1。
所以,你应该将这句话移出for循环,然后这么添加一行数据:
dt.Rows.Add("1","2","3","4","5"); unmask 发表于 2022-3-27 22:05
dt.Rows.Add((i + 1).ToString());
这句话的意思是增加一个新行,并且每行的第一列是i+1。
是这个意思,但是后面怎么写进去呢,数量未知的情况下,我有可能是1,2,3,4,5,也有可能是1,2,3 cn005897 发表于 2022-3-27 22:08
是这个意思,但是后面怎么写进去呢,数量未知的情况下,我有可能是1,2,3,4,5,也有可能是1,2,3
DataRow dr = dt.NewRow();
for (int i = 0; i < 5; i++)
{
dr = (i + 1).ToString();
} 循环的方式按照列来试下 你直接说,初始数据=>期望数据,这样才能给你源码啊 DataTable Create(int dataCount, int maxRow)
{
DataTable dt = new DataTable();
int rows = dataCount < maxRow ? dataCount : maxRow;
int i = 0;
// 生成行
for (i = 0; i < rows; i++) { dt.Rows.Add(); }
// 填充数据
int row = maxRow - 1, col = -1;
for (i = 0; i < dataCount; i++)
{
row++;
if (row >= maxRow) // 换列
{
col++;
row = 0;
dt.Columns.Add();
}
dt.Rows = i.ToString();
}
return dt;
}
页:
[1]