【问题标题】:Group rows in UI and insert in two tables in C#在 UI 中对行进行分组并在 C# 中的两个表中插入
【发布时间】:2018-04-21 04:58:48
【问题描述】:

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

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

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

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

我的桌子是:

发票

发票编号

公司编号

发票行

身份证

发票编号

标题 ....

根据我的示例图片,我想要的结果是:

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- 创建一个字典,在其中放置选定的行句柄 + pwID。

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

3- 此后,我被我的发票行卡住了,我似乎无法将其添加到我的发票行表中,因为我认为我处理此问题的设计是错误的。

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

【问题讨论】:

  • 我已经描述了我的问题(似乎无法找到一种方法来设计一种在 2 个表中插入值的方法),我已经告诉了我到目前为止所尝试的内容(创建了字典)并告诉了以后的问题是我被我的发票卡住了。
  • 我已经添加了我的代码(=我的尝试)。如您所见,我的方法不起作用,因为我遇到了一个不同值的列表,我以后无法与发票行匹配。因此为什么我问解决这个问题的最佳方法是什么

标签: c# algorithm


【解决方案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 的 Invoices 的 IEnumerable。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-19
    • 2020-02-15
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    相关资源
    最近更新 更多