在UI中对行进行分组并在C#中的两个表中插入

时间:2017-11-08 13:21:58

标签: c# algorithm

我目前正在开发一个程序,该程序应根据表的选择创建发票并添加行。

这是我的桌子(使用DevExpress创建):

enter image description here

这些是具有公司ID作为参考的未来发票行。

我想要使用的未来按钮“创建发票”是为每个选定的ID创建1张发票,并将所有选定的行添加到invoicelines表中。

我的表是:

发票

InvoiceID

CompanyID

InvoiceLines

ID

InvoiceID

标题 ....

根据我的示例图片,我希望的结果是:

每张发票增加2行的2张发票

问题是我不知道如何在我的代码中处理这个问题。

我目前有:

private void btn_ExportToDB_ItemClick(object sender, ItemClickEventArgs e)
        {
            List<int> PWIDs = new List<int>();
            List<int> distinct = new List<int>();
            Dictionary<int, int> lines = new Dictionary<int, int>();
            if (gridView.SelectedRowsCount > 0)
            {

                for (int i = gridView.SelectedRowsCount - 1; i >= 0; i--)
                {

                    int rowHandle = gridView.GetSelectedRows()[i];

                    int PWID = int.Parse(gridView.GetRowCellValue(rowHandle, "pwID_PW").ToString());
                    PWIDs.Add(PWID);
                    lines.Add(rowHandle, PWID);
                    MessageBox.Show("customer id " + PWID);

                    distinct = PWIDs.Distinct().ToList();

                }
                foreach (int value in distinct)
                {

                }
            }
}

我尝试执行以下操作:

1-创建一个字典,在其中放置所选的rowhandle + pwID。

2-之后,我遍历我的字典并选择不同的pwID值(这些值用于我的发票)。

3-此后,我遇到了发票行,我似乎无法添加到我的invoicelines表中,因为我觉得我处理这个问题的设计是错误的。

我怎样才能以最有效的方式解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果您可以从屏幕截图中的选择列表返回整个故障单对象,那么您可以运行一段代码,如下所示;

    public List<Invoice> CreateInvoices(IEnumerable<Ticket> selectedTickets)
    {
        // Group tickets by company id
        return selectedTickets.GroupBy(ticket => ticket.CompanyId)
            // Convert grouping into new Invoice objects
            .Select(g => new Invoice
            {
                // Build invoice object
                CompanyId = g.Key,
                // Build invoice lines
                InvoiceLines = g.Select(line => new InvoiceLine() {Title = line.Title}).ToList()
            }).ToList();
    }

这将返回包含多个InvoiceLines的IEnumberable of Invoices。