PDA

View Full Version : سوال: انجام محاسبه لحظه در Initialize برای DataGridView



davidrobert
جمعه 14 اردیبهشت 1397, 13:24 عصر
سلام و خسته نباشید.
دوستان من میخواستم محاسبه لحظه انجام بدم. یعنی وقتی اطلاعات وارد شد داخل دیتاگرید ویو در هر قسمت سریع محاسبه کنه و خانه به خانه عمل محسابه رو یا همون خطی رو انجام نده تو محاسبه از
private void dgv1_CellValueChanged(object sender, DataGridViewCellEventArgs e)

این رویداد بالا استفاده میکنم و برای محاسبه رو انجام میده و یه سری اطلاعات از بانک بهش ارسال میکنم برای محاسبه ولی باقی محاسبه رو انجام نمیده باید مقادیر حتما بدم دستی یا مقدار داره چون از سمت سرور ارسال شده نمیشناسه و محاسبه انجام نمیده درست بخاطر همین نیاز دارم تو Initialize دستورات صدا زده و لحظه مانند این دستور در هر ستون اطلاعات سریع محاسبه کنم.
این دستور برای تک باکس استفاده میکنم ولی برای دیتاگرید ویو که همون سطر جاری باشه رو ماندم چه کاری انجام بدم.


public Frm_Khereds()
{
InitializeComponent();
tbs = new TextBox[]
{
Txt_JBK_MabLagKol, Txt_NKH_Mablag_Kol, Txt_NKH_Mablag_Perdakhte, Txt_NKH_Monde,Txt_Mojode_Kol_Sandog,Txt_Sum_Mojode _Kol_Sandog
};
foreach (TextBox tb in tbs)
{
tb.TextChanged += new EventHandler(tbs_TextChanged);
}
}
TextBox[] tbs;

و ادامه دستورات

private void tbs_TextChanged(object sender, EventArgs e)
{
try
{
decimal JBK_MabLagKol = default(decimal);
decimal NKH_Mablag_Kol = default(decimal);
decimal NKH_Mablag_Perdakhte = default(decimal);
decimal NKH_Monde = default(decimal);
decimal Sum_Mojode_Kol_Sandog = default(decimal);
decimal Mojode_Kol_Sandog = default(decimal);
try
{
JBK_MabLagKol = Convert.ToDecimal(Txt_JBK_MabLagKol.Text.ToString( ));
}
catch
{
JBK_MabLagKol = 0;
}
try
{
NKH_Mablag_Kol = Convert.ToDecimal(Txt_NKH_Mablag_Kol.Text.ToString ());
}
catch
{
NKH_Mablag_Kol = 0;
}
try
{
NKH_Mablag_Perdakhte = Convert.ToDecimal(Txt_NKH_Mablag_Perdakhte.Text.To String());
}
catch
{
NKH_Mablag_Perdakhte = 0;
}
try
{
NKH_Monde = Convert.ToDecimal(Txt_NKH_Monde.Text.ToString());
}
catch
{
NKH_Monde = 0;
}
DataTable dt = nahveKhered.ShowBedhe(Convert.ToDouble(Txt_EKH_SHS _Shomare_Sanad.Text));
if (dt.Rows.Count == 0)
{
try
{
Lbl_NKH_Monde.Text = Convert.ToDecimal(NKH_Mablag_Kol - NKH_Mablag_Perdakhte + JBK_MabLagKol).ToString();
}
catch
{
Lbl_NKH_Monde.Text = "" + NKH_Monde;
}
}
else if (dt.Rows.Count > 0)
{
try
{
Lbl_NKH_Monde.Text = Convert.ToDecimal(NKH_Mablag_Kol - NKH_Mablag_Perdakhte).ToString();
}
catch
{
Lbl_NKH_Monde.Text = "" + NKH_Monde;
}
}
try
{
Mojode_Kol_Sandog = Convert.ToDecimal(Txt_Mojode_Kol_Sandog.Text.ToStr ing());
}
catch
{
Mojode_Kol_Sandog = 0;
}
try
{
Sum_Mojode_Kol_Sandog = Convert.ToDecimal(Txt_Sum_Mojode_Kol_Sandog.Text.T oString());
}
catch
{
Sum_Mojode_Kol_Sandog = 0;
}
try
{
Lbl_Mojode_Kol_Sandog.Text = Convert.ToDecimal(Sum_Mojode_Kol_Sandog - NKH_Mablag_Perdakhte).ToString();
}
catch
{
Lbl_Mojode_Kol_Sandog.Text = "" + Mojode_Kol_Sandog;
}
}
catch
{
}
}

دوستان اگه راحی سراغ دارید مانند این دستور برای ستون های دیتاگرید ویو پیاده کنم ممنون میشم کلی گشتم و چیزی پیدا نکردم.
این هم بگم از این دستور برای دیتاگرید ویو استفاده میکنم کارم راه میندازه ولی تو انجام محاسبات اذیت میکنه.

private void dgv1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
try
{
//دستور محاسبه روز مرجوعه
var rows = dgv1.Rows[e.RowIndex];
DataGridView dgv = sender as DataGridView;

DateTime DateBuild = DateTime.Parse(rows.Cells["Clm_KH_DateBuild"].Value.ToString());
DateTime DateEnd = DateTime.Parse(rows.Cells["Clm_KH_DateEnd"].Value.ToString());
DateTime DaysTotal = DateTime.Parse(date.simpleDate());
TimeSpan t = DateEnd - DateBuild;
TimeSpan totalday = DateEnd - DaysTotal;
rows.Cells["Clm_Total_Engeza"].Value = t.TotalDays;
rows.Cells["Clm_ModedtMondeEngaza"].Value = totalday.TotalDays;
//این دستور مورد نظر برای محاسبه تعداد کالا هستش
decimal TK_TedadKala = decimal.Parse(rows.Cells["Clm_TK_TedadKala"].Value.ToString(), NumberStyles.AllowDecimalPoint, CultureInfo.GetCultureInfo("en-US"));
decimal KH_Tedad_Kala = decimal.Parse(rows.Cells["Clm_KH_Tedad_Kala"].Value.ToString(), NumberStyles.AllowDecimalPoint, CultureInfo.GetCultureInfo("en-US"));
decimal TedadMonde = (TK_TedadKala + KH_Tedad_Kala);
rows.Cells["Clm_TedadMonde"].Value = Math.Round(TedadMonde, 1).ToString("G");

//محاسبه قیمت خرید
decimal KH_Gheme_Kala = decimal.Parse(rows.Cells["Clm_KH_Gheme_Kala"].Value.ToString(), NumberStyles.AllowDecimalPoint, CultureInfo.GetCultureInfo("en-US"));
decimal KH_Ghemet_Kol_Kala = KH_Tedad_Kala * KH_Gheme_Kala;
rows.Cells["Clm_KH_Ghemet_Kol_Kala"].Value = Math.Round(KH_Ghemet_Kol_Kala, 0);
//محاسبه قیمت فروش
decimal KH_Ghmet_Forosh = decimal.Parse(rows.Cells["Clm_NK_GemeteForosh"].Value.ToString(), NumberStyles.AllowDecimalPoint, CultureInfo.GetCultureInfo("en-US"));
decimal Total = KH_Tedad_Kala * KH_Ghmet_Forosh;
rows.Cells["Clm_NK_GemeteForoshKol"].Value = Math.Round(Total, 0);
//محاسبه تخفیف
decimal KH_Darsd_Takhfef = decimal.Parse(rows.Cells["Clm_NK_Darsad_Tekhfef"].Value.ToString(), NumberStyles.Currency, CultureInfo.GetCultureInfo("en-US"));
decimal KH_Mablag_Darsad = (KH_Darsd_Takhfef * KH_Ghemet_Kol_Kala) / 100;
rows.Cells["Clm_KH_Mablag_Darsad"].Value = Math.Round(KH_Mablag_Darsad, 0);
//محاسبه مبلغ کل تخفیف
decimal KH_Mablag_Kol_Darsad = (KH_Ghemet_Kol_Kala - KH_Mablag_Darsad);
rows.Cells["Clm_KH_Mablag_Kol_Darsad"].Value = Math.Round(KH_Mablag_Kol_Darsad, 0);
//محاسبه مالیات
decimal KH_Darsad_Maleyat = decimal.Parse(rows.Cells["Clm_NK_DarsadMaleyat"].Value.ToString(), NumberStyles.Currency, CultureInfo.GetCultureInfo("en-US"));
decimal KH_Mablag_Maleyat = (KH_Darsad_Maleyat * KH_Ghemet_Kol_Kala) / 100;
rows.Cells["Clm_KH_Mablag_Maleyat"].Value = Math.Round(KH_Mablag_Maleyat, 0);
//محاسبه مبلغ کل مالیات
decimal KH_Mablag_Kol_Maleyat = (KH_Ghemet_Kol_Kala + KH_Mablag_Maleyat);
rows.Cells["Clm_KH_Mablag_Kol_Maleyat"].Value = Math.Round(KH_Mablag_Kol_Maleyat, 0);
//محاسبه مبلغ کل پرداختی
decimal KH_Mablag_Gabel_Perdakht = (KH_Ghemet_Kol_Kala - KH_Mablag_Darsad + KH_Mablag_Maleyat);
rows.Cells["Clm_KH_Mablag_Gabel_Perdakht"].Value = Math.Round(KH_Mablag_Gabel_Perdakht, 0);
SumJameKol();
}
catch (Exception ex)
{
// MessageBox.Show(ex.Message);
}
}