PDA

View Full Version : سوال: event مناسب برای update کردن داده های موجود در datagridview بلافاصله بعد از تغییر سطر ؟



hapit2009
شنبه 04 اردیبهشت 1389, 17:14 عصر
یه برنامه خیلی ساده دارم می نویسم که یک Table داخل Database ان تعریف شده و در فرم برنامه یک Datagridview وجود داره که بوسیله SqlTableAdapter و Dataset اطلاعات موجود در دیتابیس را نشان می دهد.
بوسیله Event :
dataGridView1_UserDeletingRow
کدی نوشته ام که به محض اینکه کاربر سطری را از datagridview حذف می کند داده از دیتابیس هم حذف می شه.

حالا همینکار رو برای update کردن داده های موجود در Datagridview و به تبع ان database می خوام انجام بدم یعنی اینکه وقتی کاربر اطلاعات یک row یا یک یا چند cell از یک row را تغییر می ده و از ان row خارج می شود داده را update کنه و داخل database را بروز کنه ولی هر event ای که در اینباره دیدم بدرد نمی خورد و نتونستم جواب بگیرم در ضمن Virtual mode کنترل datagridview من نیز true هست .

لطفا برای این مشکل منو راهنمایی کنید
در ضمن overhead این نوع کار با دیتابیس بالا است یا با حالات عادی فرقی نمی کنه ؟

s.khoshfekran
شنبه 04 اردیبهشت 1389, 17:20 عصر
دوست عزیز شما لازم نیست واسه هرکدوم از اینا یه تابع کنی خیلی راحت میتونی از sqlCommandBuilder استفاده کنی و وقتی که فرمت میخواد unload بشه از متد update کلاس dataAdapter استفاده کنی و تمام تغییرات رو یکباره ذخیره کنی!! اینجوری رفت و آمدت به دیتابیس هم کمتر میشه!!!

mohammad meta
شنبه 04 اردیبهشت 1389, 17:42 عصر
دوست عزیز شما باید از command Bulder استفاده کنید .

mohammad meta
شنبه 04 اردیبهشت 1389, 17:49 عصر
اینم کد نمونه تغییرات اتوماتیک در db ثبت می شه.


// Declare a SqlDataAdapter object...
SqlDataAdapter objDataAdapter = new SqlDataAdapter();
// Assign a new SqlCommand to the SelectCommand property
objDataAdapter.SelectCommand = new SqlCommand();
// Set the SelectCommand properties...
objDataAdapter.SelectCommand.Connection = objConnection;
objDataAdapter.SelectCommand.CommandText = "usp_select";
objDataAdapter.SelectCommand.CommandType =
CommandType.StoredProcedure;
// automatically create update/delete/insert commands
SqlCommandBuilder objCommandBuilder =
new SqlCommandBuilder(objDataAdapter);

DataSet objDataSet = new DataSet();
// Fill the DataSet object with data...
objDataAdapter.Fill(objDataSet, "authors");

hapit2009
شنبه 04 اردیبهشت 1389, 20:04 عصر
دوست عزیز شما لازم نیست واسه هرکدوم از اینا یه تابع کنی خیلی راحت میتونی از sqlCommandBuilder استفاده کنی و وقتی که فرمت میخواد unload بشه از متد update کلاس dataAdapter استفاده کنی و تمام تغییرات رو یکباره ذخیره کنی!! اینجوری رفت و آمدت به دیتابیس هم کمتر میشه!!!

خیلی ممنون ولی sqlCommandBuilder در صورتی که تو دستور select از چند جدول بخونیم جواب نمیده شما مطمئنید که همیشه میشه از این روش استفاده کرد در ضمن میخوام یه حالت AutoSave باشه که کاربر مجبور به زدن کلید برای هر بار Update اطلاعات نباشه ؟

s.khoshfekran
شنبه 04 اردیبهشت 1389, 20:20 عصر
خب میتونی da.UpdateCommand و ... رو خودت تعریف کنی!!

hapit2009
شنبه 04 اردیبهشت 1389, 20:32 عصر
خب میتونی da.UpdateCommand و ... رو خودت تعریف کنی!!

خوب اونو به صورت Stored Procedure تعریف کردم این مشکلی نیست ولی مشکل اینه که :

کاربر یک Cell از یک Row دیتاگریدویوو رو تغییر میده و بعدش میره یه سطر دیگه رو تغییر میده یا سطر جدیدی اضافه میکنه تو برنامه ای که می خوام بنویسم اولا باید اینو تشخیص بده و بطورکلی از چه Event ای در Datagridview باید استفاده کنم تا بتونم اینجور کاری بکنم ؟ میخوام حالت AutoSave داشته باشه.

s.khoshfekran
شنبه 04 اردیبهشت 1389, 21:18 عصر
خب property ها Update,delete,.... واسه DataAdapte ات ست کن

hapit2009
شنبه 04 اردیبهشت 1389, 22:08 عصر
خب property ها Update,delete,.... واسه DataAdapte ات ست کن

از این نظر مشکلی ندارم می خوام یه event ای توی کنترل datagridview معرفی کنید که بتونم stored procedure ها رو فراخوانی و پارامترها رو از داخل سطر تغییر کرده واکشی کنم اینجور event ای رو پیدا نکردم

s.khoshfekran
شنبه 04 اردیبهشت 1389, 22:40 عصر
خب وقتی da.update(ds) رو فراخوانی بکنی اگه dataAdapter رو این propery هاشو ست کرده باشی اتوماتیک انجام میده

hapit2009
شنبه 04 اردیبهشت 1389, 22:47 عصر
خب وقتی da.update(ds) رو فراخوانی بکنی اگه dataAdapter رو این propery هاشو ست کرده باشی اتوماتیک انجام میده

دوست عزیز شما event های datagridview ها رو ملاحظه بکنید. من event ای پیدا نکردم که با خروج از یک row بتونم row را بررسی کنم ببینم مقداری درسلول های ان تغییر کرده یا نه و اغلب این event ها در بارگذاری اولیه مرتبا فراخوانی (Invoke ) می شن و نمی تونم چه جوری باید کنترل کنم ببینم مرحله اولیه run شدن برنامه است یا نه مثل ایونت : RowValidating یا CellValueChanged و...

3PEHR70
جمعه 31 شهریور 1391, 13:19 عصر
میتونین از cellendedit event استفاده کنید