我有数据,价格和净价格的数据网格视图。默认情况下,数量为1,相关价格为。我想编辑数量,所以净价将根据那个来。例如,如果我将数量编辑为2,则netprice将为2.它将从价格列中获取价格并计算
这是我的代码。
private void grvItems_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
foreach (DataGridViewRow row in grvItems.Rows)
{
if (e.ColumnIndex == grvItems.Columns["Quantity"].Index)
{
grvItems.EndEdit();
decimal quantity = Convert.ToDecimal(row.Cells["Quantity"].Value);
decimal price = Convert.ToDecimal(row.Cells["Amt"].Value);
decimal netprice = (quantity * price);
row.Cells["netprice"].Value = Math.Round((netprice), 2);
}
}
CalculateTotal();
}
但是,evnt没有开火。如果我编辑数量,则不会重新选择净价。请提出建议。
答案 0 :(得分:0)
只有在细胞失去焦点后,您的更改才会反映出来。 如果要在编辑期间查看更改,可以使用其他事件:
dataGridView1_CellBeginEdit
您可以从MSDN获得帮助,其中有一个简单的例子:CellBeginEdit and CellEndEdit
<强>更新强>
正如已经提到的,让我们确保您已经注册了您的活动。 在表单构造函数中,写如下:
public Form1() // Constructor
{
InitializeComponent();
grvItems.CellBeginEdit += grvItems_CellBeginEdit;
grvItems.CellEndEdit += grvItems_CellEndEdit;
}
<强>更新强>
以这种方式帮助你很难。我创建了一个类似的例子。打开一个新的Windows窗体应用程序,粘贴以下代码。 您需要在窗体(Form1)上添加DataGridView。 这个例子运行正常。完成后,尝试查看与您的代码有什么不同。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
System.Data.DataTable dt = new System.Data.DataTable();
dt.Columns.Add("Quantity", Type.GetType("System.Decimal")); // You can change it to Int32
dt.Columns.Add("Amt", Type.GetType("System.Decimal"));
dt.Columns.Add("netprice", Type.GetType("System.Decimal"));
var row = dt.NewRow();
row["Quantity"] = 1;
row["Amt"] = 2.5;
row["netprice"] = 0;
dt.Rows.Add(row);
dataGridView1.DataSource = dt;
}
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (e.ColumnIndex == dataGridView1.Columns["Quantity"].Index)
{
dataGridView1.EndEdit();
decimal quantity = Convert.ToDecimal(row.Cells["Quantity"].Value);
decimal price = Convert.ToDecimal(row.Cells["Amt"].Value);
decimal netprice = (quantity * price);
row.Cells["netprice"].Value = Math.Round((netprice), 2);
}
}
// My suggestion:
// No need to go through all the rows, just the current one
/*
if (e.ColumnIndex == dataGridView1.Columns["Quantity"].Index)
{
// dataGridView1.EndEdit(); // No need this line, you are already in CellEndEdit event
var currentRow = dataGridView1.Rows[e.RowIndex];
decimal quantity = Convert.ToDecimal(currentRow.Cells["Quantity"].Value);
decimal price = Convert.ToDecimal(currentRow.Cells["Amt"].Value);
decimal netprice = (quantity * price);
currentRow.Cells["netprice"].Value = Math.Round((netprice), 2);
}
*/
}
}
答案 1 :(得分:0)