将项目值显示到从datagridcombobox列中选择的特定数据网格列并动态计算每个选择的总数
问题描述:
我正在使用c#开发Windows窗体并使用datagridview对象。我差不多完成了,但是我在将项目值显示到在datagridview中的所有组合框中选择的特定列(PTS GAIN COLUMN)中遇到问题。数据从数据库中选择(编码)。我想要显示所选项目值的列(PTS GAIN COLUMN)在数据库中没有条目。它是空的。我希望每次从每行中的组合单元格中选择一个项目时,它都会将值显示到特定列(PTS GAIN COLUMN)并动态/实时地计算总数(我想在label.text中显示结果)将项目值显示到从datagridcombobox列中选择的特定数据网格列并动态计算每个选择的总数
此外,组合框单元格有YES,NO,NA(没有数据表单,我只是通过编写combobox.items.add(“yes/no/na”)添加了项目。在PTS AVAIL列上显示,并在PTS GAIN列上显示,如果我选择no,0将显示在PTS GAIN列中,如果NA不显示,则PTS AVAIL和PTS GAIN都将为0.同样我想尽可能计算总实数
对这件事的任何帮助都非常感谢,我正在遇到一条死路,所以请任何人!祝你有美好的一天!顺便说一句,我会张贴专业版的截图克,如果你想看到一个特定的代码块供参考,只需评论。
答
您将需要连接了2个事件来实现这一点,但在大多数情况下这是很容易的。
private void MyInitializeComponent()
{
dg.CurrentCellDirtyStateChanged += Dg_CurrentCellDirtyStateChanged;
dg.CellValueChanged += Dg_CellValueChanged;
this.CalculateTotals();
}
private void Dg_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (dg.Columns[e.ColumnIndex].Name == "Choices")
{
switch (dg.Rows[e.RowIndex].Cells["Choices"].Value.ToString())
{
case ("Yes"):
{
dg.Rows[e.RowIndex].Cells["PointsGained"].Value =
dg.Rows[dg.CurrentCell.RowIndex].Cells["PointsAvailable"].Value;
break;
}
case ("No"):
{
dg.Rows[e.RowIndex].Cells["PointsGained"].Value = 0;
break;
}
case ("NA"):
{
dg.Rows[e.RowIndex].Cells["PointsGained"].Value = "NA";
break;
}
}
this.CalculateTotals();
}
}
private void Dg_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if ((dg.Columns[dg.CurrentCell.ColumnIndex].Name == "Choices") &&
(dg.IsCurrentCellDirty))
{
dg.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}
private void CalculateTotals()
{
var totalPointsGained = dg.Rows.Cast<DataGridViewRow>()
.Where(a => a.Cells["PointsGained"].Value?.ToString() != "NA")
.Sum(a => Convert.ToInt32(a.Cells["PointsGained"].Value));
var totalPointsAvailable = dg.Rows.Cast<DataGridViewRow>()
.Where(a => a.Cells["PointsAvailable"].Value?.ToString() != "NA")
.Sum(a => Convert.ToInt32(a.Cells["PointsAvailable"].Value));
lblTotalPointsGained.Text = "Total Points Gained: " + totalPointsGained;
lblTotalAvailable.Text = "Total Points Available: " + totalPointsAvailable;
}
无论你在表格上初始化其他对象,你可以把我在MyInitializeComponent()
代码。
您是否考虑过检查组合框的值何时发生变化,并在那时进行描述? – JohnG
这是我第一次编码,我发现datagridview对象很复杂。你想让我给你看一些代码吗? @JohnG –
没有时间......尝试查找datagridviews,“CellValueChanged”事件。尝试一下,如果它不起作用...发布你已经尝试过。 – JohnG