我目前正在开发一个程序,该程序应根据表的选择创建发票并添加行。
这是我的桌子(使用DevExpress创建):
这些是具有公司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表中,因为我觉得我处理这个问题的设计是错误的。
我怎样才能以最有效的方式解决这个问题?
答案 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。