PDA

View Full Version : چرا به خاطر جستجو binding navigator بهم میریزه؟



bamzi software
چهارشنبه 19 تیر 1387, 08:02 صبح
سلام به دوستان عزیز

من در مورد دیتا گرید ویو به یک مشکلی برخورد کردم:
توی یک فرم یک دیتا گرید ویو دارم که با binding navigator روش کار می کنم و مشکلی ندارم ،اما من یک جستجو ساختم که با توجه به چند تا combobox از دیتا بیس جستجو می کنه و جواب رو توی همین دیتا گرید ویو نمایش میده.
اما تا از این جستجو استفاده می کنم دیگه binding navigator درست کار نمی کنه..
یعنی بعد از جستجو تغییراتی که میدم رو توی data base اعمال نمی کنه.
دلیلش چیه؟
ممنون می شم اگه راهنماییم کنید...

naeeme
چهارشنبه 19 تیر 1387, 08:38 صبح
کدتون رو بذارین. احتمالا یه جا دارین خطا می کنین

bamzi software
چهارشنبه 19 تیر 1387, 08:54 صبح
این کد رو پشت دکمه جستجو قرار دادم که از combobox ها بخونه



DataView dw1 = new DataView();
Class5 c1 = new Class5();
c1.comboBox1 = comboBox1.Text;
c1.comboBox2 = comboBox2.Text;
c1.comboBox3 = comboBox3.Text;
c1.comboBox4 = comboBox4.Text;
c1.comboBox5 = comboBox5.Text;
c1.comboBox6 = comboBox6.Text;
c1.comboBox7 = comboBox7.Text;
c1.comboBox8 = comboBox8.Text;
c1.comboBox9 = comboBox9.Text;

dw1 = c1.search1().Tables[0].DefaultView;
formeeshterakDataGridView.DataSource = dw1;
formeeshterakDataGridView.DataBindings.GetType();
formeeshterakDataGridView.Show();

با معماری3 لایه نوشتم

bamzi software
چهارشنبه 19 تیر 1387, 12:19 عصر
formeeshterakdatagridview اسم جدول.
search1 هم با توجه به اطلاعات comboboxها سطرهای جدول رو میگیره و بعد هم تو formeeshterakdatagridview میذاره.
تا اینجا مشکلی نیست،اما دیگه bindingnavigator عملش رو تو database ذخیره نمی کنه.
حتی دستور (this.formeeshteraktableadapter.fill(this.dbwebdat aset4.formeeshterak رو هم که میذارم فایده نداره!!!!!!!!!!!!!! :ناراحت:

hdv212
چهارشنبه 19 تیر 1387, 12:40 عصر
اگر میخوای Binding Navigator و DataGridView با هم مطابقت داشته باشن، دیتاسورس هر دو رو به یک آبجکت Bind کن، خصوصا بعد از جستجو، احتمالا پس از جستجو چون دیتاسورست داده های جدیدی رو میگیره و احتمالا به Binding Navigator بایند نشده، باعث میشه که با دیتاگریدویو همخوانی نداشته باشه.

bamzi software
چهارشنبه 19 تیر 1387, 15:29 عصر
جناب hdv212 درست می فرمائید.دیتا سورس gridview و bindingnavigator به یک آبجکت bind هستند،وگرنه که bindingnavigator درست کار نمی کرد.
حالا طبق فرمایش شما نمی دونم پشت دکمه جستجو چه کدی باید بنویسم!!!،میشه راهنماییم کنید؟
ممنون می شم

bamzi software
پنج شنبه 20 تیر 1387, 08:49 صبح
من منتظر راهنمایی شما دوستان هستم...

اصلا این کار شدنی هست که دیتا گرید ویویی که به binding navigator متصل هست رو برای نتیجه دکمه جستجو استفاده کنم؟
اگه نه باید ویرایش اطلاعات دیتا ویو رو تو یک فرم دیگه بذارم،درسته؟

hdv212
پنج شنبه 20 تیر 1387, 16:27 عصر
شما بعد از زدن دکمه ی جستجو، کدوم دیتاسورس رو پر میکنید ؟
آیا همون دیتاسورس رو که به BindingNavigator و DatagridView بایند هست، پر میکنید یا یک دیتاسورس دیگه رو ؟

bamzi software
شنبه 22 تیر 1387, 10:29 صبح
بله،تو همون دیتا سورسی میریزم که datagridview و bindingnavigator بهش bind شدند.
من کد پشت دکمه ی جستجو رو بالاتر براتون نوشتم،اگر احیانا چیزی کم داره لطفا راهنماییم کنید.
ممنون

hdv212
شنبه 22 تیر 1387, 11:53 صبح
من دقیقا متوجه مشکل شما نشدم، قاعدتا نباید مشکلی داشته باشید، به هر حال این نمونه کد رو گذاشتم، ببین مشکلت حل میشه.

bamzi software
یک شنبه 23 تیر 1387, 17:57 عصر
آقای hdv212 ممنون که راهنماییم می کنید،اما کماکان من مشکل دارم!!!
این فایل ضمیمه ای که برام گذاشتین ارتباط بین datagridview و bindingnavigator رو نشون میداد و خواستین من متوجه بشم که دیتا سورس دوتاشون باید یکی باش،ممنون..اما من در این مورد مشکلی نداشتم..
مقاله ی Creating Data Access Layer via VS2005 DataSet Designer شما رو هم خوندم،خیلی جامع بود اما بازم نتونستم متوجه بشم که اشکال کار من کجاست!!!!
مثال مقاله ی شما با مشکل من فرق داشت:من با دکمه ی جستجو میریزم تو datagridview و تو همون جدول تغییرات میدم و با save مربوط به bindingnavigator می خوام save بشه تو database که متاسفانه نمی شه....
اما تو مثال شما با دابل کلیک روی فیلد جدول،سطر مربوطه به textbox آورده می شه و اونجا تغییر داده می شه و update می شه تو databse...
اگه می شد یک مثال برام بزنید که شبیه برنامه ی من باشه خیلی عالی میشد.
ممنونم از توجه شما

hdv212
یک شنبه 23 تیر 1387, 19:44 عصر
خب برای این کار کدهای Update ای که نوشتی (شامل دستورات Insert و Update و Delete) کجا با BindingNavigator ات ارتباط دارن ؟
شما متد GetDataSource رو به شکل زیر اصلاح کن، همچنین دقت کن دو آبجکت اول رو به صورت global تعریف کردم :

DataTable dtT1;
SqlDataAdapter adapter;

private BindingSource GetDataSource(string selectCommand)
{
this.con = new SqlConnection("data source=.;initial catalog=northwind;trusted_connection=true;");
this.cmdSelectT1 = con.CreateCommand();
this.cmdSelectT1.CommandText = selectCommand;
this.dtT1 = new DataTable();
this.adapter = new SqlDataAdapter(this.cmdSelectT1);
SqlCommandBuilder builder = new SqlCommandBuilder(this.adapter);

this.adapter.InsertCommand = builder.GetInsertCommand();
this.adapter.UpdateCommand = builder.GetUpdateCommand();
this.adapter.DeleteCommand = builder.GetDeleteCommand();
this.adapter.Fill(this.dtT1);

BindingSource source = new BindingSource();
source.DataMember = "t1";
source.DataSource = this.dtT1.DefaultView;

return source;
}
حالا یک toolStripButton به BindingNavigator ات اضافه کن، این کنترل به عنوان دکمه ی Save عمل میکنه.
سپس داخل رویداد Click اون کد زیر رو بنویس تا تغییرات دیتاسورس شما رو (در اینجا dtT1) به دیتابیس منتقل کنه :

private void toolStripButton3_Click(object sender, EventArgs e)
{
DataTable getChanges = this.dtT1.GetChanges();
if (getChanges != null)
this.adapter.Update(getChanges);
}
امیدوارم مشکلت حل بشه.

bamzi software
دوشنبه 24 تیر 1387, 12:25 عصر
من 2 تا سوال برام پیش اومده:

1-این متد getdatasource کجا فراخوانی می شه؟من چنین متدی ندارم!!!

2-چرا toolstripbutton قرار دادین؟من قصدم اینه که حتما با دکمه ی save مربوط به bindingnavigator عمل ذخیره انجام بشه....

کد پشت دکمه ی ذخیره ی مربوط به bindingnavigator توسط خود برنامه این کد نوشته شده:

this.Validate();
this.formeeshterakBindingSource.EndEdit();
this.formeeshterakTableAdapter.Update(this.dbwebDa taSet4.formeeshterak);
formeeshterakاسم جدول و dbwebdataset4 اسم دیتاست....

تا وقتی button جستجو رو نزنم همه چیز درست عمل می کنه اما زمانی که توسط این دکمه داده ها از database به datagridview انتقال داده می شن دیگه اطلاعات توسط دکمه ی save مربوط به bindingnavigator عملی انجام نمی ده!!!!!

نمی دونم چی این وسط ارتباط رو قطع می کنه!!

بازم ممنونم آقای hdv212 از توجه شما