C# 如何从DataTable中提取值以在C中列出#

C# 如何从DataTable中提取值以在C中列出#,c#,sql-server,C#,Sql Server,我有一个叫做PurchaseInvoiceForm的采购发票表单。我有一个DataGridView,还使用了一个列表来存储项目,所以我成功地将数据保存在了数据库中。但是,每当我想将数据加载回表单时,一切都很好,除了我无法从DataTable提取数据并加载回PurchaseInvoiceCart,这是一个列表。下面是代码 foreach (DataTable row in dtPurchaseInvoice) { PurchaseInvoice i

我有一个叫做PurchaseInvoiceForm的采购发票表单。我有一个DataGridView,还使用了一个列表来存储项目,所以我成功地将数据保存在了数据库中。但是,每当我想将数据加载回表单时,一切都很好,除了我无法从DataTable提取数据并加载回PurchaseInvoiceCart,这是一个列表。下面是代码

    foreach (DataTable row in dtPurchaseInvoice)
        {
            PurchaseInvoice i = new PurchaseInvoice();
            i.PurchaseInvoiceNo =Convert.ToInt32(row["PurchaseInvoiceNo"]);              
        }

你可以这样做

List<PurchaseInvoice> objPurchaseInvoiceList = new  List<PurchaseInvoice>();
foreach (DataTable row in dtPurchaseInvoice)
{
    objPurchaseInvoiceList.add(new  PurchaseInvoice{ PurchaseInvoiceNo=Convert.ToInt32(row["PurchaseInvoiceNo"])});                  
}
List objPurchaseInvoiceList=new List();
foreach(dtPurchaseInvoice中的数据表行)
{
objPurchaseInvoiceList.add(新采购发票{PurchaseInvoiceNo=Convert.ToInt32(行[“采购发票”]));
}

要从数据表中提取数据,请使用
System.data.DataSetExtensions
中的
.Field()
扩展方法。请参阅文档

您需要创建一个类型为
PurchaseInvoice
的列表,并在
DataRow
collection
table.Rows
上迭代

请参见下面的示例:

// create a list for your invoices
List<PurchaseInvoice> invoices = new List<PurchaseInvoice>();

foreach (DataRow row in dtPurchaseInvoice.Rows)
{   //                                   ^ Rows
    // create invoice
    PurchaseInvoice invoice = new PurchaseInvoice();

    // get an int
    invoice.PurchaseInvoiceNo = row.Field<int>("PurchaseInvoiceNo"); 

    // get a string
    invoice.CustomerName = row.Field<string>("CustomerName");

    // get a DateTime
    invoice.PurchaseDate = row.Field<DateTime>("PurchaseDate");

    // get a double
    invoice.PurchaseValue = row.Field<double>("PurchaseValue");

    // add invoice to list     
    invoices.Add(invoice);
}
//为您的发票创建一个列表
列表发票=新列表();
foreach(dtPurchaseInvoice.Rows中的DataRow行)
{/^行
//创建发票
PurchaseInvoice发票=新的PurchaseInvoice();
//得到一个整数
invoice.PurchaseInvoiceNo=行字段(“PurchaseInvoiceNo”);
//获取字符串
invoice.CustomerName=行字段(“CustomerName”);
//约会时间
invoice.PurchaseDate=行字段(“PurchaseDate”);
//打替补
invoice.PurchaseValue=行字段(“PurchaseValue”);
//将发票添加到列表中
发票。添加(发票);
}
使用
.Field()
扩展意味着您不需要将对象转换/强制转换为正确的类型-它由扩展为您处理

它还适用于可为空的字段:

DateTime? date = row.Field<DateTime?>("PurchaseDate");
DateTime?日期=行字段(“采购日期”);

尝试dtPurchaseInvoice.Rowsforeach(dtPurchaseInvoice.Rows中的DataRow行)dtPurchaseInvoice.Rows//中的DataRow项可能重复,并作为一行:dtPurchaseInvoice.Rows.Select(新建PurchaseInvoice{.PurchaseInvoiceNo=Convert.ToInt32(行[“PurchaseInvoiceNo”])).ToList();Alfons我有多个参数,最多8个。这可能会有帮助,但我有多个参数,最多8个。@FarooqAhmed,因此您无法通过此帮助满足您的要求?谢谢,亲爱的,它是有效的。@FarooqAhmed如果解决了问题,请接受我的答案:)@FarooqAhmed查看每个答案旁边的勾号。单击您最喜欢的答案旁边的勾选/复选框。看见
DateTime? date = row.Field<DateTime?>("PurchaseDate");