PDA

View Full Version : سوال: چک کردن مقدار اطلاعات داخل دیتاگرید و دیتابیس



davidrobert
سه شنبه 21 خرداد 1392, 10:06 صبح
من اطلاعات خودم رو به وسیله datagriedview ذخیره میکنم. و دستوری قرار دادم ببینی کد خدمات تکراری هستش یا نه و میبینی درست عمل میکنه ولی یه مشکلی دارم من از 2 تا جدول استفاده میکنم یعنی اطلاعات من تو 2 تا جدول ذخیره میشه.یه جدول شامل شماره سند و فاکتور هستش و جدول دیگه شامل ثبت اطلاعات سرویس هستش.
و موقع ثبت اطلاعات دیتاگرید میاد اطلاعات رو رکورد به رکورد ثبت میکنه و اگه کد خدمات تکراری بود پیغام میده تکراری و رکورد های قبلی ثبت میشن و شماره سند و فاکتور برای رکورد قبلی عوض میشن و مقدار جدید مگرین یعنی سند قبلی که 1 هستش باید این مقدار سند قبلی هم 1 باشن ولی شماره سندشون 2 میشه من میخوام قبل از اینکه اطلاعات رو ثبت کنم .در داخل دیتابیس اول بیام چک کنم رکورد های داخل دیتابیس که کد خدمات تکراری نباشه و بعد بیام اول کل رکورد های داخل دیتاگرید رو چک کنم تکراری نباشه و وقتی دیدم مقدار داخل دیتاگرید هم تکراری نیست اطلاعات ثبت کنه ولی اگه چند تا از رکورد های تکراری بود هم اطلاعات که داخل دیتابیس بود نشان بده این هستش داخل دیتابیس و همین طور نشان بده طرف به طور اشتباه چند بار این اطلاعات رو ذخیره کرده. این دستورات من هستش برای ذخیره اطلاعات. public FrmAddFocServicVKhedemat()
{
InitializeComponent();
Program.MakebuttonStyle(this.BtnExit);
Program.MakebuttonStyle(this.BtnMin);
sqlda.SelectCommand = new SqlCommand("select A_ID,A_Doc,A_Foc,A_CodeKhedemat,A_NameServic,A_Dis trebuite,A_Pay,A_Date,A_Time from Tbl_AddFoctorKhedmat where A_ID='0'", db.con);
sqlda.Fill(dataTable1);
dataGridViewX1.DataSource = dataTable1;
sqlda.InsertCommand = new SqlCommand("Insert into Tbl_AddFoctorKhedmat (A_Doc,A_Foc,A_CodeKhedemat,A_NameServic,A_Distreb uite,A_Pay,A_Date,A_Time) values (@A_Doc,@A_Foc,@A_CodeKhedemat,@A_NameServic,@A_Di strebuite,@A_Pay,@A_Date,@A_Time)", db.con);
sqlda.InsertCommand.Parameters.AddWithValue("@A_Doc", typeof(string)).SourceColumn = "A_Doc";
sqlda.InsertCommand.Parameters.AddWithValue("@A_Foc", typeof(string)).SourceColumn = "A_Foc";
sqlda.InsertCommand.Parameters.AddWithValue("@A_CodeKhedemat", typeof(string)).SourceColumn = "A_CodeKhedemat";
sqlda.InsertCommand.Parameters.AddWithValue("@A_NameServic", typeof(string)).SourceColumn = "A_NameServic";
sqlda.InsertCommand.Parameters.AddWithValue("@A_Distrebuite", typeof(string)).SourceColumn = "A_Distrebuite";
sqlda.InsertCommand.Parameters.AddWithValue("@A_Pay", typeof(string)).SourceColumn = "A_Pay";
sqlda.InsertCommand.Parameters.AddWithValue("@A_Date", typeof(string)).SourceColumn = "A_Date";
sqlda.InsertCommand.Parameters.AddWithValue("@A_Time", typeof(string)).SourceColumn = "A_Time";
private void BtnSave_Click(object sender, EventArgs e)
{

try
{
sqlda.Update(dataTable1);
}
catch (SqlException ex)
{
if (ex.Number == 2627)
PersianMessageBox.Show("کد خدمات تکراری می باشد");
}
db.Connect();
db.cmd = new SqlCommand();
db.cmd.Connection = db.con;
db.cmd.CommandText = "Insert into Tbl_AddNumberDocAndFoc (F_Doc,F_Foc)values (@F_Doc,@F_Foc)";
//db.cmd.CommandText = "Insert into Tbl_AddFoctorKhedmat (A_Doc,A_Foc,A_CodeKhedemat,A_NameServic,A_Distreb uite,A_Pay,A_Date,A_Time) values (@A_Doc,@A_Foc,@A_CodeKhedemat,@A_NameServic,@A_Di strebuite,@A_Pay,@A_Date,@A_Time)";
//db.cmd.CommandText = "Insert into Tbl_AddNumberDocAndFoc=1,Tbl_AddFoctorKhedmat=2 (F_Doc,F_Foc,A_Doc,A_Foc,A_CodeKhedemat,A_NameServ ic,A_Distrebuite,A_Pay,A_Date,A_Time) values (@F_Doc,@F_Foc,@A_Doc,@A_Foc,@A_CodeKhedemat,@A_Na meServic,@A_Distrebuite,@A_Pay,@A_Date,@A_Time)";
db.cmd.Parameters.AddWithValue("@F_Doc", Int32.Parse(LblDoc.Text));
db.cmd.Parameters.AddWithValue("@F_Foc", Int32.Parse(LblFoc.Text));
db.cmd.ExecuteNonQuery();
db.Disconnect();

FrmAddFocServicVKhedemat_Load(null, null);
}
از این دستور برای این استفاده میکنم که اطلاعات ثبت شده به روز بشه.
FrmAddFocServicVKhedemat_Load(null, null);
ولی قبل از به روز به بیشه کل اطلاعات رو چک کنه که تکراری توش نباشه و بعد ثبت کنه اطلاعات رو.
ممنون میشم به هم بگید خیلی به هم چین چیزی نیاز دارم و یه سوال دیگه من از این دستور برای جمع کردن یه سلول دیتاگرید استفاده میکنم ولی ایراد میگیره چون از این دستور استفاده میکنم. sqlda.SelectCommand = new SqlCommand("select A_ID,A_Doc,A_Foc,A_CodeKhedemat,A_NameServic,A_Dis trebuite,A_Pay,A_Date,A_Time from Tbl_AddFoctorKhedmat where A_ID='0'", db.con);
sqlda.Fill(dataTable1);
dataGridViewX1.DataSource = dataTable1;
راهی نداره که این دستور من رو ایراد نگیره. این نباشه ایراد نگیره ولی هم اطلاعات رو برای من ذخیره نمیکنی.
int sum = 0;
for (int i = 0; i < dataGridViewX1.Rows.Count; i++)
{
sum += Convert.ToInt32(dataGridViewX1.Rows[i].Cells[6].Value);
}
TxtTotal.Text = sum.ToString();
میخوام اطلاعات هزینه هم رو حساب کنه و داخل تکس باکس بریزه.
ممنون میشم این 2 مرد رو کمک کنید .و این مقدار رو در قسمت private void dataGridViewX1_CellValueChanged(object sender, DataGridViewCellEventArgs e) قرار دادم که ایراد میگیره. میگه مقدار دیتابیس خالی و نمی تونه بخونه.
این خطا رو میگیره.
105388

programerinfonet
سه شنبه 21 خرداد 1392, 11:27 صبح
در مورد چک کردن نمی دونم اما جایگزین کردن اصلأ کار منطقیی نیست .

davidrobert
سه شنبه 21 خرداد 1392, 13:03 عصر
بچه ها به نظر شما چطور میشه از مقدار تکراری جلوگیری که تا مقدار از تکراری بدون در بیاد و بعد ذخیره کنه اطلاعات رو.من از این دستور استفاده میکنم و جواب نمیگیرم.به وسیله دیتاگرید داده ها رو وارد و ذخیره میکنم. try
{
sqlda.Update(dataTable1);
}
catch (SqlException ex)
{
for (int d = 0; d < dataGridViewX1.RowCount; )
{
if (ex.Number == 2627)
dataGridViewX1.Rows[d].DefaultCellStyle.BackColor = Color.Red;
// PersianMessageBox.Show("کد خدمات تکراری می باشد");
}
}

davidrobert
سه شنبه 21 خرداد 1392, 15:49 عصر
بچه ها کسی بلد هستش که بیشه مقدار تکراری در دیتاگرید رو شناسای کرده و رنگشون رو عوض کرد وقتی اطلاعات رو که تکراری بود عوض کردیم اون موقع بیشه اطلاعات رو کلش رو ذخیره که نا تا وقتی که عوض نشوده اطلاعات تکراری اطلاعات ذخیره نه هیچ کدام از رکورد هاش تکراری ناباشن و کل رکورد ها ذخیره کنن.

alexmcse
سه شنبه 21 خرداد 1392, 19:29 عصر
بچه ها کسی بلد هستش که بیشه مقدار تکراری در دیتاگرید رو شناسای کرده و رنگشون رو عوض کرد وقتی اطلاعات رو که تکراری بود عوض کردیم اون موقع بیشه اطلاعات رو کلش رو ذخیره که نا تا وقتی که عوض نشوده اطلاعات تکراری اطلاعات ذخیره نه هیچ کدام از رکورد هاش تکراری ناباشن و کل رکورد ها ذخیره کنن.

private void button2_Click(object sender, EventArgs e)
{

foreach (DataGridViewRow item in dataGridView1.Rows)
{
if (dataGridView1 .Rows[item.Index ].Cells[1 ].Value.ToString()=="f")
{

dataGridView1.Rows[item.Index ].Cells[0].Style.BackColor = Color.Yellow;
dataGridView1.Rows[item.Index].Cells[1].Style.BackColor = Color.Yellow;
}
else
{//code sasabt


}
}

khokhan
سه شنبه 21 خرداد 1392, 22:19 عصر
بچه ها کسی بلد هستش که بیشه مقدار تکراری در دیتاگرید رو شناسای کرده و رنگشون رو عوض کرد وقتی اطلاعات رو که تکراری بود عوض کردیم اون موقع بیشه اطلاعات رو کلش رو ذخیره که نا تا وقتی که عوض نشوده اطلاعات تکراری اطلاعات ذخیره نه هیچ کدام از رکورد هاش تکراری ناباشن و کل رکورد ها ذخیره کنن.
به عبارتی می شه گفت منظور شما اینه که اگه هر کدوم از رکوردهای گرید داخل بانک موجود بود پیغام بده و ذخیره نکنه تا اینکه کاربر مجبور بشه رکورد رو حذف کنه یا تغییرش بده درسته ؟

اگه جوابتون بله هست با کاری که می خواهید انجام بدین جور در نمی آد !!! چون شما قصد دارین یه چیزی شبیه فاکتور فروش درست کنین چه در این حالت مجبور خواهید بود شماره اختصاصی فاکتور را برای هر کدوم از اقلام موجود در گرید وارد کنین و در این صورت رکورد تکراری هم نخواهید داشت
مگه اینکه بخواهید رکورد تکراری در گرید وارد نشه