【问题标题】:ArrayList columns to DataTable columnsArrayList 列到 DataTable 列
【发布时间】:2018-05-23 20:36:00
【问题描述】:

我有一个ArrayList,它由多列组成:

如何将每个值插入我的DataTable

我的数据表如下所示:

ArrayList crmUpdate = new ArrayList();
DataTable insertDt = new DataTable();

insertDt.Columns.Add("Company", typeof(string));
insertDt.Columns.Add("Contractid", typeof(string));
insertDt.Columns.Add("ContractNumber", typeof(string));
insertDt.Columns.Add("InstAgreeNum", typeof(string));
insertDt.Columns.Add("ProductNumber", typeof(string));
insertDt.Columns.Add("StartDate", typeof(DateTime));
insertDt.Columns.Add("UpdatePrice", typeof(decimal));

我试过这样的:

foreach (object item in crmUpdate)
{
    DataRow row = insertDt.NewRow();

    row["Company"] = item;
    insertDt.Rows.Add(row);             
}

但例如我无法获得 item.Company。我需要知道如何从我的ArrayList 中引用Item.Company。希望有人可以进一步指导我。

谢谢!

更新

根据所有反馈 - 那我可以这样做吗?

  // Calculate prices
            List<CrmPartPrice> crmUpdate = new List<CrmPartPrice>();

        foreach (CrmPartPrice item in crmUpdate)
        {
            DataRow row = insertDt.NewRow();
            row["Company"] = item.Company;
            row["Contractid"] = item.ContractId;
            insertDt.Rows.Add(row);

        }

【问题讨论】:

  • 为什么还需要使用ArrayList 而不是List&lt;CrmPartPrice&gt;?没有理由再使用它了。
  • "我有一个 ArrayList..." 那么你的问题就在那里!除非您正在处理一些支持 .net 1.1 的遗留代码,否则无需再次使用 ArrayList。
  • 因为我是 C# 新手。有区别吗?获得我的价值观会更容易吗?
  • @ZoharPeled 我只是想写一些很久以前由一个人制作的遗留代码。它工作正常,我只需要在最后做点别的。
  • @plaidDK:不要等待客户反馈。现在改变它。就像:var crmUpdate=new List&lt;CrmPartPrice&gt;() 一样简单。您还应该将参数类型更改为List&lt;CrmPartPrice&gt;

标签: c# arraylist datatable


【解决方案1】:

假设由于某种原因您无法将 ArrayList 更改为 List&lt;T&gt;,您需要将项目从 ArrayList 转换为它们的实际类型,因为 ArrayList 将所有内容存储为 object

foreach (object item in crmUpdate)
{
    // the item reference is of type `object`, cast it to CrmPartPrice
    var partPrice = (CrmPartPrice)item; 
    var row = insertDt.NewRow();

    row["Company"] = partPrice.Company;
    row["Contractid"] = partPrice.Contractid;
    // more of the same...
    insertDt.Rows.Add(row);             
}

但是,您可能应该将ArrayList 更改为正确的List,并且由于它们共享很多方法,因此可能只需将声明从ArrayList crmUpdate = new ArrayList(); 更改为var crmUpdate = new List&lt;CrmPartPrice&gt;,就像 Tim Schmetler 在他的评论中建议。

【讨论】:

  • 谢谢 - 只是出于好奇 - 如果我有一个列表会是什么样子?不是说你应该解决我的问题,而是将来对我有好处。如果你有时间。无论如何感谢您的回答。
  • 你能看到我的更新吗 - 你能确认你的意思吗?
  • 是的,我就是这个意思。
  • Woohu - 感谢您的建议!有一个美好的晴天。
  • 很高兴为您提供帮助 :-) 你也是!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
  • 2011-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多