تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 3 از 6 اولاول 123456 آخرآخر
نمايش نتايج 21 به 30 از 52

نام تاپيک: دسترسی به فرم پدر؟

  1. #21
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    چون برای حالت اول این دستورات با خطا مواجه میشود!
    اگر دستورات فرم دوم شما کامل و دقیق بودند، نباید خطایی پیش می آمد!
    شما در هر صورت و حتی زمان Insert هم بحرحال باید یک DataRow به فرم دوم ارسال کنید!
    تا فرم دوم بتواند این DataRow را با مقادیر ورودی کاربر پر کند.

    ==============

    دستور فرم دوم شما باید چنین باشد...
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    ==============

    آیا این دستور مشکلی دارد؟
    TxtFName.Text = dr["FName"].ToString();
    تابع ConvertToString نوشته شده در فوق اطمینان بیشتری به همراه دارد.

    اگر مقدار داشته باشد مقدار آن نمایش داده می شود و اگر مقدار نداشته باش چیزی نمایش داده نمی شود!
    اگر مقدار یک فیلد null باشد و شما متد ToString را روی آن اجرا کنید با خطای زمان اجرا روبرو میشود.
    البته این وضعیت در فیلدهای دیتابیس خیلی بعید است، چون اغلب موارد به جای null حاوی DBNull هستند که مشکلی ایجاد نمیکند ولی کار از محکم کاری عیب نمیکند!
    (محکم کاری میتواند ضامن آبرو حرفه ای شما در حین آزمایش عملی برنامه جلو مشتری باشد!!!)

    ==============

    راستی منظور شما از چک کردن Null بودن مقادیر چیست؟
    دستور Update در فرم اول چنین خواهد شد: (با شرایط محکم کاری!)
    (یعنی من اگر بودم کدی شبیه این مینوشتم!)
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    دستور Insert در فرم اول هم، همان آخرین کد خوب است و ایراد خاصی ندارد.
    (دیگر فرض میکنیم در هیچ زمان امکان ندارد datatablename و BindingSource1 بتوانند خالی و null باشند.)

    ضمنا سعی کنید از دستور using هم بیشتر استفاده کنید!

    ==============

    این دو حالت را چگونه می توان تفکیک کرد؟
    فرم دوم شما نیاز ندارد تفاوت این دو حالت را بداند و در هر صورت باید یک DataRow صحیح تحویل بگیرد (نباید null بفرستید)
    تا بعد از کلیک دکمه OK/Save تغییرات را در DataRow اعمال کند. (در هر دو صورت Update و Insert) و با کدهای فوق دیگر مشکلی نباید داشته باشید.

    ولی اگر خیلی اصرار دارید این حالت را به فرم دوم اطلاع دهید تنا کد خاص دیگری را اجرا کنید، میتوانید بعد از DataRow یک پارامتر bool هم ارسال کنید که این دو حالت را از هم تمیز دهد.

    ==============

    موفق باشید.
    Last edited by _H2_; 07-03-2009 at 01:43.

  2. #22
    اگه نباشه جاش خالی می مونه M-B-M's Avatar
    تاريخ عضويت
    Mar 2006
    محل سكونت
    ایران - مشهد
    پست ها
    371

    8

    سلام
    شرمنده من اینقدر سئوال میپرسم!
    چندتا سئوال کوچیک دیگه!
    اول:

    ضمنا سعی کنید از دستور using هم بیشتر استفاده کنید!
    چرا؟
    مثلا تفاوت بین این دستور شما با دستور من چیست؟

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    دوم:

    تفاوت این دستور شما با دستور من چیست؟
    چرا همه جا از دستور This استفاده کرده اید؟

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    سوم:

    با فرستادن سطر DataRow نظیر در DataTable، ضمن اینکه همه فیلدها را فرستاده اید، اگر در فرم دوم ویرایشی روی DataRow انجام دهید یا متد Delete آن را (نظیر یک دکمه "حذف" روی فرم دوم) اجرا کنید در هر دو صورت بدون کد و کار اضافه ای تغییرات در گراید در همان لحظه اعمال خواهد شد.
    یعنی برای Delete چه چیزی بنویسم؟
    برای Edit چه چیزی بنویسم؟

    من برای Ins,Upd,Del هر کدام یک StoredProcedure درست کرده ام و از آنها استفاده می کنم. شما میفرمایید از آنها استفاده نکنم؟
    این روش چه مزیتی نسبت به کار با Sp ها دارد؟

    چهارم:
    فرم دوم توسط دو جدول پر میشود
    جدول1: مشخصات مشتری شامل فیلد کلید، نام، نام خانوادگی، ...
    جدول2: جدول تلفن شامل فیلد کلید، تلفن1، تلفن2، ...
    طبق راهنمایی شما من سطر انتخاب شده توسط DataGride که DataSource آن روی جدول اول تنظیم شده است را به فرم دوم میفرستم، حال چگونه اطلاعات جدول دوم را نیز به آن بفرستم؟(در فرم دوم یک ListBox وجود دارد که تلفنهای ثبت شده این فرد در آن نمایش داده میشود)

    ممنون از پاسخ های شما
    واقعا شرمنده من اینقدر شما را اذیت می کنم

  3. #23
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    ... using ...
    چرا؟
    مثلا تفاوت بین این دستور شما با دستور من چیست؟
    forum.p30world.com/showthread.php?p=1556644#post1556644


    چرا همه جا از دستور This استفاده کرده اید؟
    this در هر زمان و در هر کلاس به همان کلاسی که داخلش هستیم اشاره میکند (معادلش در VB لغت Me است)
    در بیشتر مواردی که در کدهای من دیده اید، برای مشخص کردن شی مالک اشیا بوده...
    در واقع به نظر من خوانایی را به شدت افزایش میدهد.

    مثلاً وقتی همینطوری مینویسید BindingSource1.Current این تردید به وجود می آید که BindingSource1 یک متغییر محلی است؟ پارامتری است که به تابع پاس داده شده؟ یک شی static عمومی و همگانی است؟ یا یک شی است که در سطح مالزول تعریف شده؟

    ولی this.BindingSource1.Current تمام شک و تردیدها را برطرف میکند و کامللاً مشخص است که شی مذکور غیر static است و در سطح مازول کلاس جاری که در آن هستیم تعریف شده.

    دریافت سریع و با یک نگاه این مطلب ضمن افزایش خوانایی و نیاز کمتر به توضیح نویسی، جلوی برخی اشتباه هات و خطاها را میگیرد و میتواند سرعت کد نویسی را افزایش دهد (فوراً متوجه میشوم که میتوانم این شی را در تمام توابع دیگر همان کلاس هم استفاده کنم و حق استفاده از ان را در متدهای static ندارم) ضمن اینکه در زمان تایپ نام وارد کردن this و زدن نقطه لیست مقادیر مجاز همین حوزه نشان داده میشود که محدوده کوچکتری است و سریعتر میتوان نام مورد نظر را در ان یافت.

    چرا همه جا از دستور This استفاده کرده اید؟
    ;(f.ShowDialog(this
    ولی دستور فوق کمی فرق داردف وقتی میخواهید یک فرم دیگر را باز کنید میتوانید یک فرم را به عنوان مالک آن فرم معرفی کنید...
    وچون برنامه شما در طی دو فرم و یک ریسمان اجرا میشود نوشتن this و ننوشتن ان برای متد ShowDialog تفاوتی ایجاد نمیکند ولی با این وجود باز هم ضمن افزایش خوانایی کد هم محکمتر خواهد شد و مثلاً اگر بعداً برنامه چند را یک دفعه چند ریسمانی هم کنید باز مالک فرم به درستی حفظ خواهد شد.

    یعنی برای Delete چه چیزی بنویسم؟
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    برای Edit چه چیزی بنویسم؟
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    من برای Ins,Upd,Del هر کدام یک StoredProcedure درست کرده ام و از آنها استفاده می کنم. شما میفرمایید از آنها استفاده نکنم؟
    این روش چه مزیتی نسبت به کار با Sp ها دارد؟
    کاملاً بد متوجه شدید!
    این روشها و کدها آفلاین است و فقط در سطح DataSet و DataTable اعمال میشود و در گراید قابل مشاهده است...
    در نهایت برای اعمال قطعی انها در دیتابیس باید از DataAdapter و متد Update استفاده کنید.

    مثل متد Fill که استفاده کرده اید و دیتاها را از دیتابیس خوانده و در DataSet ذخیره کرده... حالا DSataSet آفلاین استف شما میتوانید چیزی از آن حذف و اضافه و تغییر دهید و بعد با متد Update برعکس Fill عمل کنید و دیتابیس را آپدیت کنید.

    استفاده از SP ها بسیار منطقی است، شما میتوانید در فرامین Update و Insert و Delete در DataAdapter از SP ها استفاده کنید تا DataAdapter.Update بر اساس آن کار کند.

    (
    با این یک سوال من متوجه شدم که احتمالاً کمی پایه ای مشکل دارید ...
    پیشنهاد میکنم کتاب یا جزوه ای در خصوص ADO.Net را حتماً مطالعه کنید تا اصول دیتابیس را در دات نت پایه ای یادبگیرید و مشکلتان برای همیشه ریشه کن و حل شود، چون بحرحال من هر چه توضیح دهم نمیتوانم اندازه یک کتاب 100 یا 300 صفحه ای توضیح دهم و کتاب فضا و امکانات بیشتری برای شرح و بست دارد.
    )

    طبق راهنمایی شما من سطر انتخاب شده توسط DataGride که DataSource آن روی جدول اول تنظیم شده است را به فرم دوم میفرستم، حال چگونه اطلاعات جدول دوم را نیز به آن بفرستم؟(در فرم دوم یک ListBox وجود دارد که تلفنهای ثبت شده این فرد در آن نمایش داده میشود)
    یعنی یک فرم شماف همزمان دو جدول را ویرایش میکند؟
    خوب اطلاعات مورد نیاز دیگر را هم مثل همان DataRow بفرستید!

    موفق باشید.

  4. #24
    اگه نباشه جاش خالی می مونه M-B-M's Avatar
    تاريخ عضويت
    Mar 2006
    محل سكونت
    ایران - مشهد
    پست ها
    371

    12

    سلام

    با این یک سوال من متوجه شدم که احتمالاً کمی پایه ای مشکل دارید ...
    پیشنهاد میکنم کتاب یا جزوه ای در خصوص ADO.Net ...
    به توصیه شما در مورد Ado یک فایل Pdf حدود 200 صفحه ای را مطالعه کردم (ممنون از توصیه بجا و عالی شما)!
    حالا چند تا سئوال دارم؟

    1.
    من برای Ins,Upd,Del هر کدام یک StoredProcedure درست کرده ام و از آنها استفاده می کنم. شما میفرمایید از آنها استفاده نکنم؟
    این روش چه مزیتی نسبت به کار با Sp ها دارد؟
    زمانی که این دستور را استفاده میکنیم
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    مگر اطلاعات در DataSet (دیتابیس مجازی یا آفلاین) قرار نمیگیرد و برای تثبیت ان در دیتابیس از دستور
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    نباید استفاده کرد؟
    و برای Delete از
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    استفاده کنم؟
    و ...
    خوب، با این کار Sp های Ins,Upd,Del که برای تمام جدولها نوشته ام دیگر کاربردی ندارد!
    در حالی که شما در پاسخ به سئوال من فرموده بودید که

    کاملاً بد متوجه شدید!
    2. سئوال دوم در مورد دستور Using:
    منظور شما را از
    1- چون Using باید روی اشاره گر شی قفل کند، در نتیجه باید در همان خط اول شی نمونه سازی شود و پر شود و این امر را نمیتوان به خطوط بعد محول کرد و اصلاً اشاره گر شی در بدنه Using در حالت ReadOnly قرار دارد و نمیتوانید چیزی در آن بریزید.!
    2- شی مورد نظر باید واسط نابودسازی را همراه داشته باشد (System.IDisposable) یعنی برای هر نوعی که واسط مذکور را شامل نشود نمیتوان از Using استفاده کرد.
    متوجه نشدم!
    به عنوان مثال من یک کلاس با نام ChekNull دارم و در آن دو تابع ...
    زمانی که از دستور
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    استفاده می کنم با خطا مواجه می شود
    اگه امکان داره دوتا قانون رو بیشتر توضیح بفرمایید!

    3. سئوال سوم هم همون سئوال پست قبلی
    فرم دوم توسط دو جدول پر میشود
    جدول1: مشخصات مشتری شامل فیلد کلید، نام، نام خانوادگی، ...
    جدول2: جدول تلفن شامل فیلد کلید، تلفن1، تلفن2، ...
    طبق راهنمایی شما من سطر انتخاب شده توسط DataGride که DataSource آن روی جدول اول تنظیم شده است را به فرم دوم میفرستم، حال چگونه اطلاعات جدول دوم را نیز به آن بفرستم؟(در فرم دوم یک ListBox وجود دارد که تلفنهای ثبت شده این فرد در آن نمایش داده میشود)
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    ببینید من باید تمام تلفنهای این شخص را به فرم دوم بفرستم(یعنی یک رکورد از جدول اول و n رکورد از جدول دوم)و آنها را در ListBox نمایش دهم!
    چگونه تلفنهای این شخص را بدست آورم و در ListBox نمایش بدم؟
    Last edited by M-B-M; 11-03-2009 at 01:47.

  5. #25
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    خوب، با این کار Sp های Ins,Upd,Del که برای تمام جدولها نوشته ام دیگر کاربردی ندارد!
    مشکل شما آنجا است که با چند کلیک و در ساده ترین شکل و بدترین حالت ممکن DataAdapter را تولید میکنید.
    در ویزارد ها هم اگر دقت کنید، گزینه هایی دارد که اجازه میدهد Command های UPDATE و DELETE و INSERT و SELECT را به جای دستورات مستقیم SQL به SP های از قبل آماده وصل کنید.

    اتفاقاً بهترین حالت همین است، یعنی اگر هم مجبور به استفاده از DataSet و DataAdapter شدید، حداقل DataAdapter ها را برای بهترین حالت بهینه کنید و آنها را به SP های از قبل آماده وصل کنید.

    به عنوان مثال من یک کلاس با نام ChekNull دارم و در آن دو تابع ...
    استفاده می کنم با خطا مواجه می شود
    اگه امکان داره دوتا قانون رو بیشتر توضیح بفرمایید!
    قانون اول که خیلی ساده است !!!
    یعنی دستور اول زیر صحیح است ولی دستورات دوم ایراد دارد.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    قانون دوم هم ساده است، باید کلاسس شما واسط IDisposable را داشته باشد!
    مگر وراثت و پلی مورفیزم را بلد نیستید؟؟؟
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    چگونه تلفنهای این شخص را بدست آورم و در ListBox نمایش بدم؟
    واقعاً با این مسائل مشکل دارید؟ کمی فکر کنید، این راه حل ها را بدون شک میدانید ...
    شما یا میتوانید یک DataSet را ارسال کنید تا در محل ----- شود یا یک DataView ارسال کنید یا میتوانید در همان فرم و در همان محل اطلاعات را با توجه به شخص داده شده از دیتابیس استعلام کنید.

    موفق باشید.

  6. #26
    اگه نباشه جاش خالی می مونه M-B-M's Avatar
    تاريخ عضويت
    Mar 2006
    محل سكونت
    ایران - مشهد
    پست ها
    371

    پيش فرض

    سلام
    ببینید من دو تا جدول دارم:
    در جدول اول مشخصات اولیه قرار دارد و در جدول دوم مشخصات ثانویه
    کاربر از روی دیتا گرید که به جدول اول متصل شده است فرد مورد نظر را انتخاب میکند اما در فرمی که برای ویرایش اطلاعات باز می شود با اطلاعات جدول اول کاری نداریم و اطلاعات جدول دوم را باید به این فرم بفرستیم
    چگونه اطلاعات جدول دوم را به فرم ویرایش بفرستم؟

    من با این دستورات اطلاعات این مشتری را در جدول دوم بدست می اورم اما
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    چگونه آن را به System.Data.DataRowView تبدیل کنم تا آن را به فرم دیگر بفرستم؟
    چیزی مثل این :
    [[CODE]System.Data.DataRow dr = ((System.Data.DataRowView)this.periodBindingSource .Current).Row;[/CODE

  7. #27
    اگه نباشه جاش خالی می مونه M-B-M's Avatar
    تاريخ عضويت
    Mar 2006
    محل سكونت
    ایران - مشهد
    پست ها
    371

    پيش فرض

    Please Help Me!

  8. #28
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    چگونه آن را به System.Data.DataRowView تبدیل کنم تا آن را به فرم دیگر بفرستم؟
    حالا قرار نیست حتما همیشه DataRowView باشد !!!

    در جدول اول مشخصات اولیه قرار دارد و در جدول دوم مشخصات ثانویه
    کاربر از روی دیتا گرید که به جدول اول متصل شده است فرد مورد نظر را انتخاب میکند اما در فرمی که برای ویرایش اطلاعات باز می شود با اطلاعات جدول اول کاری نداریم و اطلاعات جدول دوم را باید به این فرم بفرستیم
    چگونه اطلاعات جدول دوم را به فرم ویرایش بفرستم؟
    پیشنهاد میکنم فقط و فقط عدد primarykey (احتمالاً همین FSP.PeId_Value) را برای فرم دوم بفرستید و فرم دوم خودش با DataReader اطلاعات را همانجا استخراج و مصرف کند.
    (البته اگر کارهالی دیتابیسی به لایه مخصوصی برای اینکار محول شود خیلی بهتر است که فعلاً این بحث شما نیست !)

    موفق باشید.

  9. #29
    اگه نباشه جاش خالی می مونه M-B-M's Avatar
    تاريخ عضويت
    Mar 2006
    محل سكونت
    ایران - مشهد
    پست ها
    371

    12

    سلام
    من قبلا از روشهای دیگری برای اضافه کردن، حذف کردن، ویرایش کردن دیتابیس استفاده می کردم اما از زمانی که شما پیشنهاد حرفه ای استفاده از DataRow را ارائه فرمودید سعی کردم که کل برنامه را با این روش اصلاح کنم اما در پیاده سازی آن دچار مشکل شدم
    اگر یک مشتری جدید بخواهم ثبت کنم از این دستور استفاده می کنم
    ...NewRow
    ویا اگر بخواهم اطلاعات یک مشتری را ویرایش کنم از این دستور استفاده می کنم
    System.Data.DataRow dr = ((System.Data.DataRowView)this.BindingSource1.Curr ent).Row;
    که در هر دو صورت یک DataRow به فرم دوم هنگام New کردن آن ارسال میشود و فرم دوم فقط و فقط همین DataRow را به عنوان پارامتر می پذیرد و هیچگونه پارامتر دیگری ندارد(از تولید N پارامتر بی خاصیت جلوگیری میشود)
    حال اگر فیلد کلید این مشتری در فرم اول موجود باشد و بخواهیم اطلاعات جدول دیگری که در این فرم موجود نیست در حافظه لود شود و آن را به DataRow تبدیل کرد و به فرم دوم فرستاد چه باید کرد(پیشنهاد حرفه ای چیست؟)

    راستی اگر امکان دارد این موضوع را بیشتر توضیح بفرمایید!
    البته اگر کارهالی دیتابیسی به لایه مخصوصی برای اینکار محول شود خیلی بهتر است ...

  10. #30
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    خوب شما میفرمائید دیگر برای این فرم ویرایشی جدید، DataRow ای ندارید که تحویلش دهید؟ درست است؟
    یعنی محتویات DataGridView شما هم درهرصورت شامل این DataRow نیست
    و اگر ویرایش در فرم دیاگوی دوم تمام شود، حتماً فرم اولتان هم جایی برای نمایش آن ندارد.


    اصولاً مکانیزم های وابسته به DataSet همینطوری کند هستند و آن بحث DataRow فقط زمانی خوب و مقرون است که دیگر شما DataTable و DataSet ای را برای DataGridView لود کرده باشید.
    یعنی مخصوص فقط همین ویرایش و درج نباشد (گمانم قبلاً هم گفته باشم)
    یعنی دیگر DataSet در RAM است و خوب از آن و DataRow هایش استفاده میکنم !

    ولی اگر DataSet ای در RAM نباشد و بخواهید مخصوص همین درج و ویرایش یک DataRow و طبیعتاً یک DataTable ایجاد کنید، این میشود نوعی چرخواندن لقمه دور سر !
    به نظرم روشهای online ای مثل DataReader و Command برای این موارد بدون DataTable و DataRow آماده بهتر هستند.

    (
    تازه اگر برایتان سخت نمیشد، در همان DataGridView و ویرایش و درج عناصرش هم میتوانستید از DataReader و Command استفاده کنید و در نهایت فقط همان یک سطر را در DataGridView آپدیت کنید (کمترین Fill)
    ولی کمی مشکل تر میشود و فعلاً شاید نیازتان نباشد.
    )

    ==============

    اگر خیلی روی DataRow تاکید دارید، میتوانید از دستورات زیر استفاده کنید:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    طبیعتاً برای آپدیت دیتابیس هم باز باید با DataAdapter کار کنید.

    ===============

    اگر فرمتان میخواهید کلی باشد و از هر جای برنامه قابل فراخوانی باشد ...
    مشکلی ندارد که فرم دوم شما هم DataReader قبول کند و هم DataRow !
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    طبیعتاً در شرایط DataReader برای آپدیت نهایی باید از Command استفاده کنید.

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

برچسب های این موضوع

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •