我在Datagridview中有两列,一列用于不含增值税的价格,另一列用于包含增值税的价格,我希望它是动态的,如果我更改不含增值税的价格,它将更新包含增值税的列,如果我更新包含增值税的列,它将更新不含增值税的列,反之亦然。
如果有人能帮助我用C#编写正确的代码,我将不胜感激。
这里是代码I m,使用计算到一个方向,我需要代码的逆。
private void dgv_Filho_CellEndEdit_1(object sender, DataGridViewCellEventArgs e)
{
bool Check = Convert.ToBoolean(dgv_Filho.CurrentRow.Cells["Check_Filho"].Value);
string Medida_1 = Convert.ToString(dgv_Filho.CurrentRow.Cells["Medida_1"].Value);
string Medida_2 = Convert.ToString(dgv_Filho.CurrentRow.Cells["Medida_2"].Value);
var Iva = Convert.ToDecimal(cb_Iva.Text);
if (Check)
{
if (!string.IsNullOrWhiteSpace(tb_CodigoArtigo.Text) || !string.IsNullOrWhiteSpace(tb_Descricao.Text))
{
dgv_Filho.CurrentRow.Cells["ArtigoPai"].Value = tb_CodigoArtigo.Text;
dgv_Filho.CurrentRow.Cells["Descricao_Pai"].Value = tb_Descricao.Text + " " + Medida_1 + Medida_2;
dgv_Filho.CurrentRow.Cells["CodigoArtigoFilho"].Value = tb_CodigoArtigo.Text + Medida_1 + Medida_2;
//dgv_Filho.CurrentRow.Cells["PrecoFilhoSemIva"].Value = tb_PVP1.Text;
decimal PrecoFilho = Convert.ToDecimal(dgv_Filho.CurrentRow.Cells["PrecoFilhoSemIva"].Value);
if (PrecoFilho > 0)
{
decimal PrecoFilhoComIva = PrecoFilho * Iva / 100 + PrecoFilho;
dgv_Filho.CurrentRow.Cells["PrecoFilhoComIva"].Value = PrecoFilhoComIva;
}
}
else
{
dgv_Filho.CurrentRow.Cells["ArtigoPai"].Value = string.Empty;
dgv_Filho.CurrentRow.Cells["Descricao_Pai"].Value = string.Empty;
}
}
}
2条答案
按热度按时间wdebmtf21#
使用您现有的代码,这并不太困难:首先,使用
if
/else if
语句中已编辑列的名称来筛选应进行的转换,以便更改增值税列不会被增值税前列覆盖。以下是它的外观:
使用此代码,编辑增值税前值将自动相应更新增值税后值,编辑增值税后值将自动相应更新增值税前值
m3eecexj2#
与其直接与
DataGridView
交互(这可能会很复杂),不如创建一个实现INotifyPropertyChanged
的类,并使其所有内部计算始终保持最新(这更容易)。下面是此类的简化版本,它响应Descricao
、Medida
和PrecoFilhoSemIva
的更改。表示一行数据的简化类
此类的示例被放置在
BindingList
中,该BindingList
被分配给dgv_Filho
的DataSource
属性,并导致DGV在调用Refresh方法时更新。初始化
与DGV的唯一交互应该是在
Load
事件的MainForm
覆盖中正确地初始化列和绑定。这也是我们将组合框绑定到Iva的静态值的地方,Iva可用于行项的计算。第一个