PDA

View Full Version : textbox و datagrid



akram23
شنبه 13 خرداد 1391, 00:05 صبح
سلام به همه مهندسین
یه سوال دارم فقط خواهشا نگید جستجو کن چون 2 روز دارم این کار رو می کنم و نتیجه نگرفتم :گریه:
من می خوام یک فرم داشته باشم که شامل datagrid و textBox هست و کاربر با کلیک بر روی هر سطر داده های مربوط به آن رکورد را در textBoxها مشاهده می کند من میخواهم اگر کاربر داده های dataGrid را ویرایش کرد در textbox ها تغییری ایجاد نشود و حتی وقتی روی ثبت هم کلیک کرد باز هم تغییرات اعمال نشود و در عوض وقتی داده های textBox را تغییر داد با کلیک بر روی ثبت تغییرات هم در پایگاه اعمال شود و هم در dataGrid
خواهشا کمک کنید خیلی فوری هست.:افسرده:

Y_Safaiee
شنبه 13 خرداد 1391, 00:27 صبح
با سلام خدمت شما

برای نمایش داده های داخل دیتاگرید در تکس باکس ها




txt_id.Text = dataGridView1.CurrentRow.Cells[0].Value.ToString();
txt_name.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString();



و الا آخر , اگه توجه کنی currentrow سطر جاری و cell سلول رو مشخص میکنه

برای سوال دومت باید یک کوئری بسازی که با دادن یک فیلد یکتا و خاص مقادیرشو بروز کنه و سپس با رفرش دیتاگریدت اطلاعات بروز شه (مثلا کد دانشجو فیلد یکتایه,کد درس,کد ملی و ...)

موفق باشید
بایت بایت

akram23
شنبه 13 خرداد 1391, 01:13 صبح
خیلی ممنون از پاسختون من ایناهارو قبلا امتحان کردم ولی نتیجه ای که من میخواستم رو نداره من می خوام کاربر وقتی داده های dataGrid رو تغییر می ده اعمال نشه و حتی تغییرات روی داده های textbox هم اثر نگذارد و فقط وقتی داده های textbox را عوض کرد با کلیک بر روی ثبت داده ها ثبت شود .
من قکر کنم برای هر کدام از این دو بایدdataset های متفاوت تعریف کنم و البته این کار را هم کردم اما نمی تونم دیگه بهش بفهمونم که وقتی مثلا داده های ردیف 2 انتخاب شده آنها را در textBox نمایش دهد .
خواهشا راهنمایی کنید و اگر امکانش هست با کد

akram23
شنبه 13 خرداد 1391, 01:23 صبح
دقیقا من یک همچین چیزی میخوام
که در این لینک گذاشتم
http://akram66.persiangig.com/new/

Y_Safaiee
شنبه 13 خرداد 1391, 01:42 صبح
با سلام مجدد
[/URL]
[URL="http://barnamenevis.org/member.php?165203-akram23"]akram23 (http://barnamenevis.org/member.php?165203-akram23) عزیز شما فقط فایل اجرایی رو آپلود کردید لطفا پایگاه داده رو هم آپلود کنید,مرسی

akram23
شنبه 13 خرداد 1391, 01:54 صبح
در همان آدرس upload کردم
ممنون

Arash_janusV3
شنبه 13 خرداد 1391, 02:18 صبح
با سلام

کدها را در selectionchange بنویسید

akram23
شنبه 13 خرداد 1391, 02:33 صبح
با سلام

کدها را در selectionchange بنویسید

می شه بگید چه کدهایی رو ؟؟؟!!
من مشکل اصلیم رو تو پست سوم نوشتم

akram23
شنبه 13 خرداد 1391, 11:40 صبح
دوستان لطفا کمک کنیک:گیج:

Arash_janusV3
شنبه 13 خرداد 1391, 13:43 عصر
فرم شما دارای اشکالاتی است

در فرم دو حالت بگذار یکی زمانی که در حالت لود هست و کاربر فقط می تونه اطلاعات را ببینه
و حالت دیگه اینه که کاربر دکمه ویرایش را بزنه و شما رویداد selectionchange را غیر فعال کنید و وقتی کاربر فرم را از حالت ویرایش خارج می کنه شما مجددا selectionchange را فعال کنید
شما دارین همزمان هم اطلاعات را نمایش می دین هم تغییرات را

txt_id.Text = dataGridView1.CurrentRow.Cells[0].Value.ToString();
txt_name.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString();


اینها را در selectionchangeبنویسید

البته یک راه دیگه هم هست اگر این را متوجه شدی و به کارت نیومد بگو تا اونم بگم

akram23
شنبه 13 خرداد 1391, 14:06 عصر
اینها را در selectionchangeبنویسید

البته یک راه دیگه هم هست اگر این را متوجه شدی و به کارت نیومد بگو تا اونم بگم

ممنون از کمکتون اما حل نشد هنوز همون مشکل هست
ببینید من نمیخوام با تغییر داده های dataGrid تغییرات در textbox ها اعمال شود یعنی اگر در datagrid رکورد 2 رو مقدارش را مثلا از A به Bتغییرداد تغییرات فقط در همون datagrid بماند و در textbox هم این تغییرات اعمال نشود و با زدن دکمه ثبت ثبت نشود ولی در عوض اگر داده ای را در Textbox تغییر داد این تغییر ثبت شود.
آقا آرش می شه اگه امکانش هست فایلی که قراردادم را دانلود کنید من دقیقا یه همچین چیزی می خوام خیلی فوری نیاز دارم
با تشکر

Arash_janusV3
شنبه 13 خرداد 1391, 14:18 عصر
شما دقیقا متوجه نشدید من چه راهی را بهتون گفتم
شما ذهنتون را از اون مثالی که دادین پاک کنید و از این روش استفاده کنید
جزئیات بیشتری را بهتون می گم
ببنید یک فرم را در نظر بگیرید
یک گرید در پایین داره و گرید در وضعیت فقط خواندنی هستش یعنی کاربر فقط می تونه اطلاعات را ببینه
و در بالای فرم 4 دکمه دارید
جدید ویرایش حذف تایید
وقتی کاربر جدید یا ویرایش را می زنه گرید از حالت فقط خواندنی خارج می شه و کاربر می تونه ویرایش کنه و شما باید رویداد selectionchange را غیر فعال کنید
و وقتی تایید را می زنه شما گرید را فقط خواندنی کن و selectionchange را فعال کن
همین
خیلی راحته

مثال فعال و غیر فعال برای تکس باکس

txtText.TextChanged += new EventHandler(txtText_TextChanged);
txtText.TextChanged -= new EventHandler(txtText_TextChanged);

بالایی فعال و پایینی غیرفعال
ساده ترین روش همینه

akram23
شنبه 13 خرداد 1391, 15:00 عصر
حق با شماست با این کار می شه
ولی مشکل اساسی من این هست که دقیقا از من اون فرم خواسته شده و نمیشه از راه دیگه ای رفت:ناراحت:

Arash_janusV3
شنبه 13 خرداد 1391, 15:05 عصر
این هم همونه ولی با ساختاری بهتر

akram23
شنبه 13 خرداد 1391, 15:16 عصر
خیلی ممنون از لطفتون
اینو پیاده می کنم شاید قبول کنند.:لبخندساده:

samadblaj
شنبه 13 خرداد 1391, 15:26 عصر
txtText.TextChanged += new EventHandler(txtText_TextChanged);
txtText.TextChanged -= new EventHandler(txtText_TextChanged);


ببخشید این کد چیکار میکنه ؟

Arash_janusV3
شنبه 13 خرداد 1391, 15:40 عصر
اگر شما از رویداد TextChanged استفاده کرده باشین
می بینین که هر بار که متنی در تکس باکس وارد می شه دستورات داخل این رویداد اجرا می شه
حالا فرض کنید در جایی قراره که متنی وارد بشه ولی دستورات داخل رویداد TextChanged اجرا نشه
کافیه این دستور مثلا در فرم لود بنویسید

txtText.TextChanged -= new EventHandler(txtText_TextChanged);



با این دستور دیگر TextChanged اجرا نمی شود
و با دستور

txtText.TextChanged += new EventHandler(txtText_TextChanged);



رویداد آماده برای اجرا شدن می شود

akram23
شنبه 13 خرداد 1391, 15:42 عصر
ممنون از توضیحات خوبتون

samadblaj
شنبه 13 خرداد 1391, 16:06 عصر
ممنونم از توضیحت، یعنی فقط رویداد رو فعال/غیر فعالش میکنه و تا دوباره فرم Load نشه به حالت اول برنمیگرده. (فقط اگه دوباره خودت فعال/غیر فعالش کنی؟)

ببخشید این عمل بیشتر چه زمان هایی بدرد میخوره؟

Arash_janusV3
شنبه 13 خرداد 1391, 16:19 عصر
ممنونم از توضیحت، یعنی فقط رویداد رو فعال/غیر فعالش میکنه و تا دوباره فرم Load نشه به حالت اول برنمیگرده. (فقط اگه دوباره خودت فعال/غیر فعالش کنی؟)

ببخشید این عمل بیشتر چه زمان هایی بدرد میخوره؟
دقیقا همینطوره

من خیلی جاها استفاده می کنم مثال زدنش سخته
مثلا گاهی وقتها برای صدا زدن یک رویدادی رویداد دیگری درگیر می شه
مثلا
رویداد textchange رویداد keypress همزمان صدا زده می شه حالا شما می خواین
keypress اجرا نشه یا برعکس

akram23
شنبه 13 خرداد 1391, 16:31 عصر
من یک سوال دیگه بپرسم!!
فرض کنیم textbox ها bind شدن حالا من میخوام بهش بگم برو سر فلان رکورد چه دستوری باید نوشت؟
ببخشید خیلی وقتتون رو گرفتم:خجالت:

Arash_janusV3
شنبه 13 خرداد 1391, 16:39 عصر
خواهش می کنم
ما همه برای کمک اینجا هستیم


فرض کنیم textbox ها bind شدن حالا من میخوام بهش بگم برو سر فلان رکورد چه دستوری باید نوشت؟

منظورتون واضح نیست
کاربر رکورد مورد نظرش را خودش در گرید انتخاب می کنه

akram23
شنبه 13 خرداد 1391, 16:48 عصر
بزرگوارید.
منظورم این هست که مثلا یک فرم داریم شامل 4 تا textBox مثلا نام و نام خانوادگی و تلفن و یک شماره دانشجویی که نشان داده نمی شود حالا کاربر در textBox4 شماره دانشجویی را وارد می کند و با زدن دکمه جستجو می خواهم اطلاعات مربوط به آن کاربر را در textbox ها نمایش دهد
در ضمن textbox ها به بانک وصل هستند
حالا راهی وجود دارد؟؟

Arash_janusV3
شنبه 13 خرداد 1391, 16:56 عصر
راههای مختلفی هست
یکیش اینه که
کاربر وقتی شماره را زد اول چک می کنید این شماره در جدول موجود هست یا نه
اگر بود گرید را فیلتر کن بر اساس شماره و خودش نمایش می ده یعنی فقط همان دانشجو را نمایش می دی در گرید
و اگر نبود یک پیغام می گذاری و گرید را فیلتر تمام می گذارید یعنی همه جدول را نمایش می دید
با این روش برای همه فیلدها می تونید به کار بگیرید مثلا نام خانوادگی وقتی می زنه همه اون نامها فیلتر می شوند
به همین سادگی
فراموش نکنید که در وارد کردن شماره دانشجو تکراری در جدول ذخیره نشود

akram23
شنبه 13 خرداد 1391, 17:34 عصر
با تشکر مجدد
اما منظور من این بود که این بار datagrid نداریم و فقط textbox هایی داریم که جدول وصل هستند حالا میخواهیم با وارد کردن شماره دانشجویی اطلاعات اون دانشجودر textbox ها نمایش داده شود

Arash_janusV3
شنبه 13 خرداد 1391, 17:41 عصر
با تشکر مجدد
اما منظور من این بود که این بار datagrid نداریم و فقط textbox هایی داریم که جدول وصل هستند حالا میخواهیم با وارد کردن شماره دانشجویی اطلاعات اون دانشجودر textbox ها نمایش داده شود


select * from where number=1

و این مقدار را در دیتاتیبل بریزید و مقدارها را به text های مورد نظر ارتباط بدید

akram23
پنج شنبه 18 خرداد 1391, 02:07 صبح
سلام دوستان من مشکلم حل شد گفتم پروژه ام بذارم تا اگر کسی این مشکل را داشت شاید بدردش بخوره توضیح کلی آن هم به این صورت است که
من از 2 تا dataset در برنامم استفاده کردم که یکی از آنها داده های اولیه را نگه می دارد و هرگاه تغییری در داده ها از طریق textBox انجام شود در آن نگه داری می شود و دیگری به dataGrid وصل می شود در خاصیت change مربوط به dataGrid به این صورت عمل کردم که کاربر هر سطر را که انتخاب کند بسته به اینکه چه سطری انتخاب شده index مربوط به آن را از dataSetی که داده های اولیه را نگه می دارد فراخوانی می کند و داده ها را در textBox ها نمایش می دهد تا تغییراتی که روی dataGrid انجام شده اما ثبت نشده نشان داده نشود
من فقط باید تغییراتی که از طریق textBox انجام شده را ثبت کنم نه تغییراتی که در dataGrid انجام شده
در نتیجه هنگامی که روی save کلیک می شود ابتدا باید داده های dataSet اولیه که تغییراتی که از طریق textBox ها انجام شده را در ds مربوط به dataGrid کپی کنم و سپس آن را ثبت کنم و در dataGrid نمایش دهم
کد ها را می توانید از اینجا دانلود کنید
http://akram66.persiangig.com/new/source/
امیدوارم مفید باشد.