我有一個DataGridView ID爲,Depense,抗皺和餘額:計算值的DataGridView
餘額的計算方法通過添加前一資產負債+ Depence +抗皺。
我有3個按鈕,AddProduct,UpdateProduct和DeleteProduct。
addProduct命令:它會增加一行到的DataGridView,但如果在DataGridView是空的,(第一線)餘額= 0 + 10 + 10,並且如果不是,(第三行)餘額= 60 + 30 + 30 = 120。例如,如果我用Depense和Recette = 50更新最後一行,所以最後的平衡值將是220和。如果我更新了最後一行Depense和Recette = 50,那麼最後的平衡值將是220和255。
DeleteProduct:UpdateProduct的按鈕也是一樣的想法,但只是從受影響的行中刪除餘額。我刪除了第二行,第三行和第四行受到了影響。
我的問題是如何做到這一點?
更新: 代碼在DataGridView中顯示的數據
private void BindGrid()
{
DataGridViewTresorerie.DataSource = null;
using (SqlConnection con = new SqlConnection(connstring))
{
using (SqlCommand cmd = new SqlCommand("select IdTre,Depense,Recette,Balance from Tresorerie", con))
{
cmd.CommandType = CommandType.Text;
using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
{
using (DataTable dt = new DataTable())
{
sda.Fill(dt);
DataGridViewTresorerie.DataSource = dt;
}
}
}
}
}
更新2:我補充一點,計算從DataGridView中第二行的平衡的方法,然後我調用該方法中添加,更新,並刪除,但沒有發生。
Decimal BalanceInput;
int IdTreInput;
private void UpdateBalance()
{
for (int i = 1; i < DataGridViewTresorerie.Rows.Count; i++)
{
BalanceInput = Convert.ToDecimal(DataGridViewTresorerie.Rows[i].Cells[3].Value) + Convert.ToDecimal(DataGridViewTresorerie.Rows[i - 1].Cells[12].Value);
IdTreInput = Convert.ToInt32(DataGridViewTresorerie.Rows[i].Cells[0].Value);
using (SqlConnection con = new SqlConnection(connstring))
{
using (SqlCommand cmd = new SqlCommand("Update Tresorerie set Balance= @Balance WHERE IdTre = @IdTre", con))
{
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@Balance", BalanceInput);
cmd.Parameters.AddWithValue("@IdTre", IdTreInput);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
//I call the new DataGridView to recalculate again after modify or add or delete the new data
BindGrid();
}
}
更新3:我修改了代碼,我把它當我點擊o按鈕進行測試,第一次點擊可以完美運行,但是當我再次點擊它再次添加總結,所以我再添「爲「來計算單獨的每一行的平衡,但沒有發生,它保持了同樣的問題
Decimal BalanceInput=0;
int IdTreInput;
private void UpdateBalance()
{
// calculate again somme of balance
for (int i = 0; i < DataGridViewTresorerie.Rows.Count; i++)
{
BalanceInput = Convert.ToDecimal(DataGridViewTresorerie.Rows[i].Cells[11].Value) + Convert.ToDecimal(DataGridViewTresorerie.Rows[i].Cells[12].Value);
IdTreInput = Convert.ToInt32(DataGridViewTresorerie.Rows[i].Cells[1].Value);
using (SqlConnection con = new SqlConnection(connstring))
{
using (SqlCommand cmd = new SqlCommand("Update Tresorerie set Balance= @Balance WHERE IdTre = @IdTre", con))
{
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@Balance", BalanceInput);
cmd.Parameters.AddWithValue("@IdTre", IdTreInput);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
}
// update balance
for (int i = 0; i < DataGridViewTresorerie.Rows.Count; i++)
{
if (i == 0)
BalanceInput = Convert.ToDecimal(DataGridViewTresorerie.Rows[i].Cells[13].Value);
else
{
BalanceInput += Convert.ToDecimal(DataGridViewTresorerie.Rows[i].Cells[13].Value);
IdTreInput = Convert.ToInt32(DataGridViewTresorerie.Rows[i].Cells[1].Value);
using (SqlConnection con = new SqlConnection(connstring))
{
using (SqlCommand cmd = new SqlCommand("Update Tresorerie set Balance= @Balance WHERE IdTre = @IdTre", con))
{
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@Balance", BalanceInput);
cmd.Parameters.AddWithValue("@IdTre", IdTreInput);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
//I call the new DataGridView to recalculate again after modify or add or delete the new data
BindGrid();
}
}
}
我們看到你有一個DataGrid ** View **,但是你有什麼**數據**?換句話說,你是使用綁定還是非綁定模式?如果綁定,數據源的類型是什麼? –
我從sql server獲得日期,並在datagridview中顯示它,在計算每一行的新餘額後,我更新表格。 – Juste3alfaz
我問的是你使用類似'gridView.DataSource = something;'的東西。如果是,請顯示「某事」。 –