吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 906|回复: 8
收起左侧

[求助] c# 动态创建DataTable

[复制链接]
7R903 发表于 2022-3-27 21:47
有个题卡住了,

我想在循环内去创建一个DataTable,创建列,行之类的
现在生成的都是同一列(见下图),在列数不确定的情况下,如何能在写完一列后,将数据写在另一列?
[C#] 纯文本查看 复制代码
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;
        }



发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xiaovssha 发表于 2022-3-27 22:00
[C#] 纯文本查看 复制代码
            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)));


[C#] 纯文本查看 复制代码
            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);
 楼主| 7R903 发表于 2022-3-27 22:05
xiaovssha 发表于 2022-3-27 22:00
[mw_shl_code=csharp,true]            dt_detail = new DataTable();
            dt_detail.Columns.Add ...

我觉得我的想法可能有点复杂,我的DataTable需求是一列一列生成的,而不是一行一行生成的
unmask 发表于 2022-3-27 22:05
dt.Rows.Add((i + 1).ToString());

这句话的意思是增加一个新行,并且每行的第一列是i+1。
所以,你应该将这句话移出for循环,然后这么添加一行数据:
dt.Rows.Add("1","2","3","4","5");
 楼主| 7R903 发表于 2022-3-27 22:08
unmask 发表于 2022-3-27 22:05
dt.Rows.Add((i + 1).ToString());

这句话的意思是增加一个新行,并且每行的第一列是i+1。

是这个意思,但是后面怎么写进去呢,数量未知的情况下,我有可能是1,2,3,4,5,也有可能是1,2,3
unmask 发表于 2022-3-27 22:13
cn005897 发表于 2022-3-27 22:08
是这个意思,但是后面怎么写进去呢,数量未知的情况下,我有可能是1,2,3,4,5,也有可能是1,2,3

[C#] 纯文本查看 复制代码
DataRow dr = dt.NewRow();
for (int i = 0; i < 5; i++)
{
    dr[i] = (i + 1).ToString();
}
TakeKeyEasy 发表于 2022-3-28 00:20
循环的方式按照列来试下
xiaovssha 发表于 2022-3-28 00:38
你直接说,初始数据=>期望数据,这样才能给你源码啊
wu0o0pj 发表于 2022-3-28 10:34
[C#] 纯文本查看 复制代码
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[row][col] = i.ToString();
            }

            return dt;
        }
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 14:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表