【发布时间】:2019-09-20 21:02:06
【问题描述】:
我正在使用 C# 在 Asp.Net 中开发一个自定义 POS 应用程序,我在 Windows 窗体上有两个 DataGridView。 DataGridView1 显示所有销售额。当用户单击 DataGridView1 中的任何记录时,DataGridView 上选定记录中的某些详细信息(如 ProductName、Quantity、Variation、UnitPrice 和 TotalCost)将传递给 DataGridView2。这是使用 DataGridView2 中的 CurrentCellChanged 事件完成的。
我的问题是我有多个与我试图在 DataGridView2 上显示的每个销售相关的详细信息,但我无法将所选销售的每个详细信息设置为 DataGridView2 的数据源。这是我到目前为止尝试过的代码:
private void DataGridView1_CurrentCellChanged(object sender, EventArgs e)
{
try
{
string saleId = DataGridView1.CurrentRow.Cells[0].Value.ToString();
DataGridView2.DataSource = SalesClass.SelectedSaleDetails(saleId);
}
catch (Exception)
{
}
}
这里,CurrentCellChanged 事件将选定的 SaleId 传递给我的 SalesClass,我在其中查询与此特定 SaleId 相关的销售详细信息,如下所示:
public static DataTable SelectedSaleDetails(string saleId)
{
DataTable dt = new DataTable();
dt = DataAccess.Select(string.Format("select * from vSalesDetails where SaleID = {0}", saleId));
string[] values;
foreach (DataRow drItem in dt.Rows)
{
string variation = drItem["ProductVariation"].ToString();
string productName = drItem["ProductName"].ToString();
decimal quantity = Convert.ToDecimal(drItem["SaleQuantity"]);
decimal saleCostLevelC = Convert.ToDecimal(drItem["LevelCCost"]);
decimal purchaseCostLevelC = Convert.ToDecimal(drItem["LevelCPurchaseCost"]);
decimal levelBStandard = Convert.ToDecimal(drItem["LevelBStandard"]);
decimal levelCStandard = Convert.ToDecimal(drItem["LevelCStandard"]);
decimal parentTotalSalesCost = 0;
decimal levelATotalSalesCost = 0;
decimal levelBTotalSalesCost = 0;
decimal levelCTotalSalesCost = 0;
decimal salecost = 0;
decimal unitCost = 0;
switch (variation)
{
case "Parent Product":
decimal soleProductUnitPrice = Convert.ToDecimal(drItem["SoleProductUnitPrice"]);
salecost = quantity * soleProductUnitPrice;
unitCost = soleProductUnitPrice;
break;
case "Level A":
decimal levelBSaleCost = levelCStandard * saleCostLevelC;
decimal levelASaleCost = levelBStandard * levelBSaleCost;
salecost = quantity * levelASaleCost;
unitCost = levelASaleCost;
break;
case "Level B":
decimal saleCostLevelB = levelCStandard * saleCostLevelC;
salecost = quantity * saleCostLevelB;
unitCost = saleCostLevelB;
break;
case "Level C":
salecost = quantity * saleCostLevelC;
unitCost = saleCostLevelC;
break;
default:
break;
}
values = new string[] {productName, variation, unitCost.ToString(), quantity.ToString(), salecost.ToString()};
}
// return each of the productName, variation, unitCost and quantity of a selected Sale here. This is going to be assigned as the DataGridView2 DataSource.
}
我的代码运行良好,我能够在 foreach 循环内的 values 数组中获取所有必需的值。但是,我无法在此处将特定销售的销售详细信息(产品名称、变化、单位成本和数量)传递回 DataGridView2 数据源:
DataGridView2.DataSource = //values returned from SalesClass;
有没有人可以建议我一个更好但更有效的方法,因为我是这里的新手。
【问题讨论】:
标签: c# arrays winforms datagridview datatable