gpt4 book ai didi

c# - 将垂直行转换为水平数据表

转载 作者:行者123 更新时间:2023-11-30 22:02:40 24 4
gpt4 key购买 nike

我有一个网络服务,在下面的代码中我循环遍历了一个项目集合。这些项目以类似时尚的 xml 形式显示(请参见下面的示例)。但是我想像时尚一样在 table 上展示它们。我想到了使用数据表将项目插入其中然后重新显示它们。

585344
585344 Title Issue 1
585344 Number 140024
585344 State In progress
585350
585350 Title Issue 2
585350 Number 140026
585350 State Classification

我怎样才能像这样显示它们:

ID        |  Title             |   Number    | State         
585344 issue 1 140024 In progress

   static void Main(string[] args)
{
ABWebService webSvc = new ABWebService();
GetObjectListData gold = new GetObjectListData();

gold.folderPath = "01. ITSM - Service Operation";
gold.RequiredField = new RequiredField[3];
gold.RequiredField[0] = new RequiredField {Value = "Title"};
gold.RequiredField[1] = new RequiredField {Value = "Number"};
gold.RequiredField[2] = new RequiredField {Value = "State"};

try
{
GetObjectListResult golr = webSvc.GetObjectList(gold);

List<NewsTracker> list = new List<NewsTracker>();
if (golr.success)
{
ObjectData[] myObjects = golr.Object;
for (int i = 0; i < myObjects.Length; i++)
{
Console.WriteLine(myObjects[i].id);
foreach (object myItem in myObjects[i].Items)
{
string field1 = string.Empty;
string val1 = string.Empty;
int val2 = 0;
string field2 = string.Empty;

StringVal item = myItem as StringVal;
if (item != null)
{
field1 = item.name;
val1 = item.Value;
Console.WriteLine("\t" + myObjects[i].id + " " + field1 + " " + val1);

}

LongIntVal val = myItem as LongIntVal;
if (val != null)
{
field2 = val.name;
val2 = val.Value;
Console.WriteLine("\t" + myObjects[i].id + " " + field2 + " " + val2);

}

}
}
}

}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
throw;
}
}

编辑 1:

你能告诉我如何将它们添加到像这样的通用列表中吗:list.Add(new NewsTracker(title,number,state)); 这样我就可以循环执行其他操作 list 上的东西?

最佳答案

如果您只有简单类型,那么您可以使用反射来构建该表。这是我经常用来将类信息发送到 Web 服务的方法示例。一旦您理解了逻辑,可以进行调整以接收一个列表并创建一个包含多行的表

public static DataTable ObjectToData(object o)
{
DataTable dt = new DataTable("OutputData");
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);

o.GetType().GetProperties().ToList().ForEach(f =>
{
try
{
f.GetValue(o, null);
dt.Columns.Add(f.Name, f.PropertyType);
dt.Rows[0][f.Name] = f.GetValue(o, null);
}
catch { }
});

return dt;
}

如果您按下面的结构传递对象 ClassA

ClassA
{
string Value1 = "abc";
DateTime Value2 = DateTime.Now();
int Value3 = 12;
}

ObjectToData(MyClassA); 数据表将如下所示:

|----------|-------------------------|----------|
| Value1 | Value2 | Value3 |
|==========|=========================|==========|
| "abc" | 2015/10/30 08:00:00 AM | 12 |
|----------|-------------------------|----------|

关于c# - 将垂直行转换为水平数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26651342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com