PDA

View Full Version : اعمال تغییرات در لحظه



kh1387
شنبه 20 مهر 1387, 16:34 عصر
با سلام
چطوری می شه وقتی یه رکورد رو توی بانک ذخیره کردیم، بعدش طوری فرم رفرش بشه که همون لحظه اونو در لیست باکس یا کامبو ببینیم؟

من از متد رفرش استفاده کردم ، نمی شه.
لطفا اگه ممکنه راهنمایی کنند دوستان

xxxxxxxxxx
شنبه 20 مهر 1387, 17:06 عصر
سلام اگر نمونه كدت را مي گذاشتي بهتر جواب مي گرفتي .
ولي تا خودت تغييري در جداول درون برنامه ات ندهي چيزي عوض نمي شود ،حال با دوبار پركردن جدولهايت يا با اضافه كردن ركوردهاي جديدي كه به بانك اطلاعاتت اضافه گرديده

razavi_university
شنبه 20 مهر 1387, 18:28 عصر
باید دوباره انباره داده ها رو Fill کنید و مجدد مقدار DataSource اون کنترل رو روی انباره تنظیم کنید
(انباره شما هر چیزی مانند DataTable, DataSet و ...)

kh1387
سه شنبه 23 مهر 1387, 00:40 صبح
باید دوباره انباره داده ها رو Fill کنید و مجدد مقدار DataSource اون کنترل رو روی انباره تنظیم کنید
(انباره شما هر چیزی مانند DataTable, DataSet و ...)


درست نشد.

اگه ممکنه بگید کجا باید این کار رو انجام بدهم؟

jaza_sa
سه شنبه 23 مهر 1387, 01:13 صبح
((CurrencyManager)dgv.BindingContext[datasource_name]).Refresh();

razavi_university
سه شنبه 23 مهر 1387, 01:55 صبح
من کلی نوشتم انباره چون نمی دونم شما چطور ComboBox تون رو پر می کنید (با BindingContext یا DataTable یا DataSet , ...)
کدی که برای پر کردن ComboBox استفاده می کنین رو بگذارین تا بتونم کد مورد نیاز رو واستون بگذارم

kiosksoft
سه شنبه 23 مهر 1387, 09:34 صبح
عمل Binding رو مجدد اجرا کنید حل میشه.

kh1387
سه شنبه 23 مهر 1387, 10:24 صبح
من کلی نوشتم انباره چون نمی دونم شما چطور ComboBox تون رو پر می کنید (با BindingContext یا DataTable یا DataSet , ...)
کدی که برای پر کردن ComboBox استفاده می کنین رو بگذارین تا بتونم کد مورد نیاز رو واستون بگذارم




da_Driver.Fill(dt_Driver);
comboBoxDriver.DataSource = dt_Driver;
comboBoxDriver.DisplayMember = "code";
comboBoxDriver.ValueMember = "code";

girlflower65
سه شنبه 23 مهر 1387, 14:55 عصر
کلمه code توی کدی که بالا نوشتید یعنی چی؟

kh1387
سه شنبه 23 مهر 1387, 15:54 عصر
واسه اینکه اسم ستون جدول بانکم code هستش!!!

razavi_university
پنج شنبه 25 مهر 1387, 18:14 عصر
پیشنهاد میکنم یک متد ایجاد کنید و کدهایی که قرار دادید (مربوط به بایند کرد Combo) را درون آن بریزید و هر زمانی که نیاز به Reftresh بود آنرا فراخوانی کنید.

اگر از متد استفاده نکردید دو خط اول کفایت میکند
موفق باشید

kh1387
پنج شنبه 25 مهر 1387, 22:40 عصر
پیشنهاد میکنم یک متد ایجاد کنید و کدهایی که قرار دادید (مربوط به بایند کرد Combo) را درون آن بریزید و هر زمانی که نیاز به Reftresh بود آنرا فراخوانی کنید.

اگر از متد استفاده نکردید دو خط اول کفایت میکند
موفق باشید

متشکرم از پاسختون، اما چیزی که برام سؤاله اینه که در کجا باید از این دستور fill استفاده کنم من که هر کار کردم نشد.:متفکر:

xxxxxxxxxx
جمعه 26 مهر 1387, 01:24 صبح
همانطور که دوستمون گفتند متدی برای بایند کردن این کمبو ایجاد کن که1- ابتدا تیبل را پاک کند وبعد2- دستور fill را اجرا کن و3- ارتباطش را با کمبو تنظیم کن.
این متد را هنگام الف- load شدن فرم اصلی ب- ونیزهنگام اضافه کردن آیتم جدید مثلا در پنجره مدیریت تنظیمات ر و خروج از آن اجرا کن.
لازم بذکر است که بهتر است متدی هم برای unbindکردن کمبو درست کنی تا قبل از استفاده متد درحالت ب آن را فرا خوانی کنی.
روش دیگر اینست که اگر مثلا درپنجره مدیریت یا هرجایی که رکورد مورد نظر باموفقیت به بانک اضافه گردید همانجا همان رکورد ( البته اطلاعاتش)را به dt_Driver اضافه کنی که دیگر نیازی به کارهای بالا (مثل fillکردن)نداری.این روش برای برنامه های چند کاربره توصیه نمی شود.
امیدوارم مفید باشد.

kh1387
یک شنبه 28 مهر 1387, 18:36 عصر
با تشکر از پاسخ دوستان
اما مشکلی که پر کردن دیتا تیبل با هر بار تکرار رویداد داره اینه که اگه بانکمون بیش از 1.000.000 رکورد داشته باشه که دیگه ...
تازه بانک من 10 تا رکورد داره تقریبا یک ثانیه معطل می کنه وای به حال 1.000.000 به بالا!!

Alen
دوشنبه 29 مهر 1387, 11:12 صبح
با تشکر از پاسخ دوستان
اما مشکلی که پر کردن دیتا تیبل با هر بار تکرار رویداد داره اینه که اگه بانکمون بیش از 1.000.000 رکورد داشته باشه که دیگه ...
تازه بانک من 10 تا رکورد داره تقریبا یک ثانیه معطل می کنه وای به حال 1.000.000 به بالا!!

دوست عزيز يه راهكار اينه كه وقتي از اضافه شدن ركوردت به جدول پايگاه داده مطمئن شدي اونرو به طور دستي به datagridview هم اضافه كني
http://barnamenevis.org/forum/showthread.php?t=126712

parsamiga
دوشنبه 29 مهر 1387, 13:33 عصر
کد رو به این صورت بنویس ....


comboBoxDriver.DataSource = dt_Driver;
comboBoxDriver.DisplayMember = "code";
comboBoxDriver.ValueMember = "code";
comboBoxDriver.DataBindings.Add("Text", dt_Driver, "code");
comboBoxDriver.DataBindings.Clear();


آنچه او ریخت به پیمانه ما نوشیدیم
اگر از خمر بهشت است وگر باده مست

kh1387
دوشنبه 29 مهر 1387, 15:17 عصر
من مسئله ام اینه که می خوام دیتا تیبل هنگام کی دون پر بشه با متد fill()
اگه روش بهتریه خواهش می کنم راهنمایی کنید.

kh1387
سه شنبه 30 مهر 1387, 15:06 عصر
کسی نیست راهنمایی کنه؟

parsamiga
سه شنبه 30 مهر 1387, 16:09 عصر
یا من منظور شما رو نمی فهمم یا شما منظور منو :لبخند:

این نمونه رو تست کن ببین منظورت همینه




public string conString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.MDB";
public DataTable MyDataTable;
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
OleDbConnection con = new OleDbConnection(conString);
con.Open();
OleDbCommand cmd = con.CreateCommand();
cmd.CommandText = "insert into TB(Name) values('" + textBox1.Text + "')";
cmd.ExecuteReader();
//-----------------------------------------------------
string TxtSql = "Select *from TB";
OleDbDataAdapter MyAdapter = new OleDbDataAdapter(TxtSql, con);
DataTable DataTBL = new DataTable();
DataSet MyDataSet = new DataSet();
MyAdapter.Fill(MyDataSet, "Name");
MyDataTable = MyDataSet.Tables["Name"];
ComboMemberCode.DataSource = MyDataTable;
ComboMemberCode.DisplayMember = "Name";
ComboMemberCode.DataBindings.Add("Text", MyDataTable, "Name");
ComboMemberCode.DataBindings.Clear();
}


:متفکر::متفکر:

kh1387
سه شنبه 30 مهر 1387, 20:36 عصر
دوست خوبم من الان یه جعبه متن دارم که در رویداد keyDown اون تیبل هام رو پر می کنم.
اما وقتی برنامه رو اجرا می کنم سرعت پایینه .
می خوام ببینم راهی برای اینکار وجود داره؟
اون کامبو باکسه رو حل کردم، اما راه حل شما هم مفید بود
بازم متشکرم

Alen
سه شنبه 30 مهر 1387, 22:37 عصر
دوست عزیز اگه بخواهی اطلاعاتی که به کاربر نشون داده میشه قابلیت ویرایش هم داشته باشه نه
ولی تا اونجا که میدونم باید برای خوندن اطلاعات از DB به صورت readonly راهکارسریعتری وجود داشته باشه (فکر میکنم تو دلفی dbexpress رو داشتیم اگه اشتباه نکنم)
ولی این نکته رو هم بدون که اگه تعداد رکوردها زیاد باشه در هر صورت زمان زیادی برای واکشی صرف خواهد شد.
اگه راه دیگه ای وجود داره قیذاینکه رویداد keydown متد Fill رو اجرا کنی بزن