我目前正在开发一个程序,它应该根据表格的选择来创建发票和添加行。
这是我的表(使用 DevExpress 创建):
这些是以公司 ID 作为引用的 future 发票行。
我想对 future 按钮“创建发票”做的是为每个选定的 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- 此后,我一直在处理我的发票行,我似乎无法将其添加到我的发票行表中,因为我认为我处理此问题的设计是错误的。
我怎样才能以最有效的方式解决这个问题?
最佳答案
如果您可以从屏幕截图中的选择列表中返回整个工单对象,那么您可以运行一段代码,如下所示;
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();
}
这将返回一个 IEnumerable of Invoices,每个 Invoices 中包含多个 InvoiceLines。
关于c# - 在 UI 中对行进行分组并在 C# 中插入两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47180847/