首页 新闻 会员 周边 捐助

求助办法,C# 循环字段列名,同时循环出来每个列名下的字段值

0
悬赏园豆:200 [待解决问题]

例如我在循环我的table像以下代码(以下代码思路是错误的)只看标题
XElement XEle = new XElement("UserInfos");

    for (int i = 0; i < dsDataXml.Tables[0].Columns.Count; i++)
    {
        for (int j = 0; j < dsDataXml.Tables[0].Rows.Count; j++)
        {
            XEle.Add(
            new XElement("UserInfo",
                new XElement(dsDataXml.Tables[0].Columns[i].ToString(), 
                dsDataXml.Tables[0].Rows[0][j]))
            );
        }
    }

我已经把每列的列名拿到了dsDataXml.Tables[0].Columns[i].ToString();但是我也想同时拿到每列下每个字段的值(也可以是行的每一个字段的值)
目的是为了自动生成XML,因为我一直不想去拼接了,太烦了!

inthere的主页 inthere | 初学一级 | 园豆:14
提问于:2020-10-10 09:54
< >
分享
所有回答(4)
0

for (int j = 0; j < dsDataXml.Tables[0].Rows.Count; j++)
{
for (int i = 0; i < dsDataXml.Tables[0].Columns.Count; i++)
{
XEle.Add(
new XElement("UserInfo",
new XElement(dsDataXml.Tables[0].Columns[i].ToString(),
dsDataXml.Tables[0].Rows[i][j]))
);
}
}

试一下这个呢?

程序员修炼之旅 | 园豆:976 (小虾三级) | 2020-10-10 10:45
0

你是想这样吗:

using System;
using System.Collections.Generic;
using System.Data;

namespace DTTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var dt = CreateTestData();
            var data = GetDataFromDt(dt);
        }

        static DataTable CreateTestData()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("A");
            dt.Columns.Add("B");
            dt.Columns.Add("C");
            for (int i = 0; i < 10; i++)
            {
                var row = dt.NewRow();
                row[0] = $"A{i}";
                row[1] = $"B{i}";
                row[2] = $"C{i}";
                dt.Rows.Add(row);
            }
            return dt;
        }

        static Dictionary<string, List<Object>> GetDataFromDt(DataTable dt)
        {
            var dic = new Dictionary<string, List<Object>>();

            for (int i = 0; i < dt.Columns.Count; i++)
            {
                var colName = dt.Columns[i].ColumnName;
                var values = new List<object>();

                foreach (DataRow row in dt.Rows)
                {
                    values.Add(row[i]);
                }

                dic.Add(colName, values);
            }

            return dic;
        }
    }
}

会长 | 园豆:12463 (专家六级) | 2020-10-10 10:55
0

试一下
https://stackoverflow.com/questions/5259759/how-can-i-convert-a-datatable-to-an-xml-file-in-c?r=SearchResults

DataSet ds = new DataSet();
ds.Tables.Add(dt1); // Table 1

string dsXml= ds.GetXml();

flyfishing | 园豆:927 (小虾三级) | 2020-10-10 11:02
0

这时候反射应该登场了,或者自己找个现成ORM框架(比如Dapper)

大志若愚 | 园豆:2138 (老鸟四级) | 2020-10-10 13:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册