使用while一次迭代2个列表

时间:2015-03-01 18:41:55

标签: c# .net datatable while-loop

var itemAmountList = _itemAmountvalue.Split(',');
var listItemDescriptionValues = _itemDescriptionvalue.Split(',');

IEnumerator enum1 = itemAmountList.GetEnumerator();
IEnumerator enum2 = listItemDescriptionValues.GetEnumerator();

DataTable dtCustomInvoiceDetail = new DataTable();
dtCustomInvoiceDetail.Columns.Add("purchaseOrderID");
dtCustomInvoiceDetail.Columns.Add("itemAmount");
dtCustomInvoiceDetail.Columns.Add("itemDescription");

while ((enum1.MoveNext()) && (enum2.MoveNext()))
{
            var description = enum1.Current;
            var amount = enum2.Current;

            DataRow dr = dtCustomInvoiceDetail.NewRow();
            dr["itemDescription"] = description;
            dr["itemAmount"] = amount;
            dr["purchaseOrderID"] = strPoid;
}

上面是我用来迭代列表并填充数据表的代码。

我没有看到任何行添加到数据表

  1. 验证数据并且看起来不错
  2. 它根据需要在循环中迭代
  3. 但仍未在数据表中看到任何数据

2 个答案:

答案 0 :(得分:3)

在您的代码中

DataRow dr = dtCustomInvoiceDetail.NewRow();

实际上没有向表中添加行,它只创建具有正确列的表行。要添加您需要调用的行

dtCustomInvoiceDetail.Rows.Add(dr)

最后

答案 1 :(得分:1)

问题是您没有将生成的行添加到datatable。

Datatable.NewRow

  

您必须使用NewRow方法创建新的DataRow个对象   与DataTable相同的架构。创建DataRow后,您   可以通过DataRowCollection将其添加到DataTable   对象的Rows属性

您应该像这样

将行添加到数据表中
dtCustomInvoiceDetail.Rows.Add(dr);

另请注意,您可以将整个枚举器逻辑转换为简单的for循环,它具有更高的可读性和更少的开销

for (int i = 0; i < Math.Min(itemAmountList.Count, listItemDescriptionValues.Count); i++)
{
    var description = itemAmountList[i];
    var amount = listItemDescriptionValues[i];

    DataRow dr = dtCustomInvoiceDetail.NewRow();
    dr["itemDescription"] = description;
    dr["itemAmount"] = amount;
    dr["purchaseOrderID"] = strPoid;
}

似乎名称和变量赋值之间也存在不一致。您可以从listItemDescriptionValuesamount变量以及从itemAmountListdescription分配值。请仔细检查一下。