C# 将列表转换为数据表
假设我有一个类似于C# 将列表转换为数据表,c#,asp.net,list,datatable,C#,Asp.net,List,Datatable,假设我有一个类似于PL={P1,0,10,P2,5,20}的列表,我需要将其转换为类似 ProcessName ArrivalTime CpuTime P1 0 10 P2 5 20 进程数(行计数)是动态的。我尝试过这样的事情: protected DataTable CreateDataTable() { int j = 0; List<string> PL = Create
PL={P1,0,10,P2,5,20}
的列表,我需要将其转换为类似
ProcessName ArrivalTime CpuTime
P1 0 10
P2 5 20
进程数(行计数)是动态的。我尝试过这样的事情:
protected DataTable CreateDataTable()
{
int j = 0;
List<string> PL = CreateProcessList();
DataTable DT = new DataTable();
for (int i = 0; i < PL.Count - 2; i += 3)
{
DataRow ProcessRow = DT.NewRow();
DT.Rows[j][0] = PL[i].ToString();
DT.Rows[j][1] = Convert.ToInt32(PL[i + 1]);
DT.Rows[j][2] = Convert.ToInt32(PL[i + 2]);
j++;
}
DT.Columns.Add("Header", typeof(string));
DT.Columns[0].ColumnName = "ProcessName";
DT.Columns[1].ColumnName = "ArrivalTime";
DT.Columns[2].ColumnName = "CpuTime";
return DT;
}
受保护的数据表CreateDataTable()
{
int j=0;
List PL=CreateProcessList();
DataTable DT=新的DataTable();
对于(int i=0;i
它不起作用(表示位置0处没有行)。谢谢你的建议
版本后的工作代码:
受保护的数据表CreateDataTable()
{
List PL=CreateProcessList();
DataTable DT=新的DataTable();
Add(“ProcessName”,typeof(string));
添加(“到达时间”,类型(int));
添加(“CpuTime”,typeof(int));
对于(int i=0;i
在第二次迭代中,您的for
循环i
是3,因此您将得到表的第4行(此时您的表有2行)。然后,您将获得该行的第4、第5和第6列(您的表有0列,因为您尚未添加任何列)以设置其值。相应的索引超出范围错误应该告诉您这里到底出了什么问题
不要访问表中的第i行。只需使用
ProcessRow
访问该行;它就在一个变量中。不要访问第i列,访问第1列、第2列和第3列(并在尝试填充列之前添加这些列)。类似的操作应该有效。继续添加到curRow,直到当前迭代以“p”开始。当它以“p”开始时,将currentRow添加到数据表中并开始一个新行
DataTable dataTable;
DataRow curRow;
... add columns to dataTable
for (var i = 0; i < PL.Count; i++) {
if (PL[i].ToString().StartsWith("P")) {
if (curRow != null)
dataTable.Rows.Add(curRow);
curRow = dataTable.NewRow();
}
... add PL[i] to curRow
}
DataTable;
数据行电流;
…向dataTable添加列
对于(变量i=0;i
这其中有一些小问题,但可以很容易地解决。在添加到数据表之前,请检查以确保curRow不为null……诸如此类的事情。要按照您描述的方式创建数据表,您需要遵循不同的方法
感谢回复,我如上所述编辑了我的代码。仍然是“位置0处没有行”。@samet然后您没有按照我描述的所有方式编辑代码,即您仍然试图通过其索引访问行。感谢这另一个精确的解决方案!
DataTable dataTable;
DataRow curRow;
... add columns to dataTable
for (var i = 0; i < PL.Count; i++) {
if (PL[i].ToString().StartsWith("P")) {
if (curRow != null)
dataTable.Rows.Add(curRow);
curRow = dataTable.NewRow();
}
... add PL[i] to curRow
}