PDA

View Full Version : update کردن یک لیست اطلاعات



seven7777777
چهارشنبه 13 خرداد 1388, 10:55 صبح
سلام

دوستان می خواستم نظرتون رو در مورد طریقه آپدیت کردن یک لیست بدونم . نوع این لیست کلاسی هست که 5 مورد رو درباره یک مقاله در خودش داره ( مثلا عنوان ، سال و ... )
حالا کاربر می تونه این لیست رو تغییر بده . 4 نوع تغییر ممکنه انجام بشه .
موردی که وجود داره تغییری نکنه .
موردی که وجود داره حذف بشه .
موردی که وجود داره تغییر کنه .
یک مورد جدید اضافه بشه .
حالا اگه یکی 200 تا مقاله داشته باشه ، به روش دستی و چک کردن تک تکشون و اینکه تو کدوم یک از حالات بالا هستن یکم غیر معقوله .
از اساتید کسی راه بهتری برای آپدیت این لیست بلده ؟؟؟

mohsen_csharp
چهارشنبه 13 خرداد 1388, 13:11 عصر
دوست عزیز یکم واضح تر توضیح بده من که چیزی نفهمیدم.
منظور از مورد چی هست؟
نوع لیست چیست؟
در لیست چه عناصری ذخیره میشه؟
منظور از تغییر چیست؟

seven7777777
چهارشنبه 13 خرداد 1388, 16:48 عصر
دوست خوبم سلام

من یه کلاس دارم که مقاله رو مدل می کنه یعنی اعضای داده ای اون نام مقاله ، سال انتشار و ... هست .( من از معماری سه لایه استفاده می کنم که این لایه مدل مقاله است )
من یک عضو در برنامم دارم که لیستی از مقالات رو برای اون ثبت کردم . حالا من می خوام مقالاتش رو Update کنم .

List<Article_Model> artList = new List<Article_Model>();
من این مقالات رو در لیستی به شکل بالا از بانک واکشی می کنم و حالا می خوام کاربر بتونه اونها رو تغییر بده یعنی یکیشو حذف کنه ، مقاله جدیدی اضافه کنه ، مشخصات یکی رو تغییر بده و یا هیچکدوم از این حالت ها .
خوب ، اگه یه کاربر مثلا 200 تا مقاله داشت ، چک کردن اینکه یک مقاله چطور تغییر پیدا کرده و اعمال اون در بانک زمان گیره .
می خوا بدونم روش یا متد یا شی نیست که خودش این ردیف ها رو نگهداره و بعد بفهمه که رو هر ردیف چه نوع تغییری صورت گرفته و بعد دستورات لازم رو اعمال کنه .
یه چیزی مثل Dataset که اطلاعات رو نگه داره و تمام این کارها رو مدیریت کنه .
اگر نیست آیا به نظر شما الگوریتم کارآمدی برای این کار وجود داه ؟؟؟

راستی ممنون که جواب دادی !!!

mohsen_csharp
چهارشنبه 13 خرداد 1388, 17:09 عصر
با سلام
خود دیتاست برای مدیریت این کارها به صورت زیر عمل می کنه.
برای هر رکورد یک فلگ در نظر می گیره که نشان دهنده تغییراتی است که کاربر روی رکوردها انجام میده.
مثلا اگه کاربر رکوردی اضافه کنه فلگ اون Added میشه و اگه ویرایش یا حذف کنه هم به همین ترتیب فلگ اونا مقدار میگیره.
حالا موقع ذخیره کردن در پایگاه داده، میاد این فلگ ها رو بررسی می کنه و به تناسب هر رکورد عمل مناسب اونو انجام میده.
حالا تو هم میتونی به این کلاست یه فلگ اضافه کنی و اعمال متداول رو بهش نسبت بدی.
حواست باشه اگه یه رکوردی حذف شد نباید اونو حذف فیزیکی کنی بلکه باید فلگ اونو علامت بزنی و موقع ذخیره لیست در پایگاه داده این رکورد رو از پایگاه داده حذف کنی.
توجه داشته باش که جدول تو حتما باید کلید اصلی داشته باشه.
من کنترل یا کلاس خاصی که این کارها رو مدیریت کنه، نمی شناسم ولی الگوریتم کارآمد همینه که عرض کردم.
البته یک کار راحت تر و غیر اصولی این هست که تمام اطلاعات این لیست رو از پایگاه داده حذف کنی و مقادیر جدید رو دوباره نویسی کنی. اگه تعداد رکوردها برای هر لیست مقدار کمی هست می تونی از این روش هم استفاده کنی.

NewFoxStudent
چهارشنبه 13 خرداد 1388, 17:10 عصر
برای این کار بهتره به جای جنریک از همون DataSet استفاده کنی
فکر نمیکنم متد آماده ای باشه . باید متد های ثبت رو خودت بنویسی ولی با DataSet همه چیز اتوماتیک انجام میشه

seven7777777
پنج شنبه 14 خرداد 1388, 09:07 صبح
یه بنده خدایی می گفت که من بیام از Dataset و SqlDataAdapter استفاده کنم . بعدش بیام Dataset رو به گرید Bind کنم . اینجوری تمام تغییرات در Dataset اعمال میشه . بعد در SqlDataAdapter ، 4 دستور مختلف رو بنویسم که رخ می ده و بعد فقط در هنگام زدن کلید Update خود به خود همه کار انجام بشه و هر ردیف بنا به تغییری که کرده یکی از دستورات انجام بشه .
من که هر کار کردم ، نونستم چیزی که گفت بفهمم و انجام بدم ولی به نظر روش خوبی میاد .
اکه این روشو متوجه شدید واسه منم بگین بفهمم !!!

تشکر که جواب دادین .

NewFoxStudent
پنج شنبه 14 خرداد 1388, 13:33 عصر
دوست عزیز فکر کنم منظور اون بنده خدا این بوده که شما یه DataAdapter بسازی و توسط متد Fill یک دیتا ست رو پر کنی و از طریق متد Update تغییراتی رو که روی DataSet اعمال میشه تو بانک اطلاعاتی اعمال کنی این کار به این صورت انجام میشه

شما میتونی تغییرات ایجاد شده تو یه DataTable یا یه DataSet رو به روش زیر به بانک منتقل کنی

معرفی اشیا از کلاسهای مورد نیاز


SqlConnection sqlConnection = new SqlConnection("Data Source=100.10.1.5;Initial Catalog=Attendence;Integrated Security=False;User ID=sa;Password=master");
SqlCommand sqlCommand;
SqlDataAdapter adapter;
DataTable DT;


انتقال اطلاعات به DataTable و نمایش اون توی گرید


string sqlCmd = "Select * From Personel";
sqlCommand = new SqlCommand(sqlCmd, sqlConnection);
adapter = new SqlDataAdapter(sqlCommand);
DT = new DataTable("Personel");
adapter.Fill(DT);
dataGridView1.DataSource = DT;


ثبت تغییرات ایجاد شده در بانک



sqlCommand = new SqlCommand("Select * From Personel", sqlConnection);
SqlCommandBuilder sqlCmdBuilder = new SqlCommandBuilder(adapter);
adapter.SelectCommand = sqlCommand;
adapter.InsertCommand = sqlCmdBuilder.GetInsertCommand(true);
adapter.UpdateCommand = sqlCmdBuilder.GetUpdateCommand(true);
adapter.DeleteCommand = sqlCmdBuilder.GetDeleteCommand(true);
adapter.Update(DT);


با کد بالا اگه کاربر یک ردیف به گرید اضافه کنه یا حذف کنه و یا تغییری توی یک ردیف ایجاد کنه تمام این تغییرات با هم توی بانک اعمال میشه

البته لازم به توضیح که در صورتی که ردیفی از گرید حذف بشه و اون رکورد توی یه جدول دیگه استفاده شده باشه (منظورم همون کلید خارجی) در این صورت موقع Update باید اون رو هم کنترل کنی