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

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




صفحه 2 از 6 اولاول 123456 آخرآخر
نمايش نتايج 11 به 20 از 52

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

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

    پيش فرض

    سلام
    یک سوال کلی:
    من در فرم اول یک DataGride دارم که وقتی کاربر یک رکورد از آن را انتخاب می کند تمام اطلاعات این DtaGride در فرم دوم (فرم ویرایش) نمایش داده می شود و کاربر اطلاعات را ویرایش می کند.
    این n فیلد را چگونه به فرم دوم بفرستم؟
    پیشنهادات:
    1. تمام TextBoxهایی که در فرم دوم قرار است اطلاعات را نمایش دهد را Public کنم و از فرم اول آنها را مقدار دهی کنم
    2. یک آرایه Public از نوع String در فرم دوم ایجاد کنم و تمام خانه های آن را مقدار دهی کنم و در رویداد Load فرم دوم مقادیر این آرایه را در TextBoxها بریزم
    3. Id فردی که انتخاب شده است را به فرم دوم بفرستم و در رویداد Load فرم دوم از دیتابیس مقادیر را بخوانم و در TextBoxها وارد کنم
    4. ...
    شما از چه روشی استفاده میکنید؟
    پبشنهاد شما چیست؟

  2. #12
    کـاربـر بـاسـابـقـه am_merman01's Avatar
    تاريخ عضويت
    May 2006
    محل سكونت
    یه جایی گوشه دهکده جهانی تو یه کانکشن دایال آپ
    پست ها
    893

    پيش فرض

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

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

    پيش فرض

    سلام
    لطفا در مورد طریقه ساخت DateRow و طریقه بکار گیری آن توضیح بفرمایید؟(مقدار دهی به آن و مقدار گیری از آن (فیلدهایی از نوع Int,String,...))
    به طور معمول یک DataRow تکی قابل تولید نیست، یعنی باید یک DataTable داشته باشید که از اعضای Rows آن استفاده کنید و یا یک NewRow بسازید.

    یعنی با کدهای شبیه این قابل به دست آوردن است...
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    و با کدهایی شبیه این قابل دسترسی و ویرایش است.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    من در فرم اول یک DataGride دارم که وقتی کاربر یک رکورد از آن را انتخاب می کند تمام اطلاعات این DtaGride در فرم دوم (فرم ویرایش) نمایش داده می شود و کاربر اطلاعات را ویرایش می کند.
    این n فیلد را چگونه به فرم دوم بفرستم؟
    1. ...
    2. ...
    3. ...
    1) بدترین راه ممکن!
    2) اگر تمام فیلدها از یک نوع باشند شاید قابل قبول باشد.
    3) بد نیست ولی یک خواندن در فرم دوم میخواهد و یکی هم در فرم اول، برای سرعت بهتر است انجام نشود.

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


    موفق باشید.

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

    پيش فرض

    سلام
    من یک متغیر Public در فرم دوم تعریف کردم

    \\FrmCustomer
    public System.Data.DataRow Dr;

    بعد زمانی که کاربر یک نفر را از DataGride انتخاب می کند با این دستور اطلاعات را از فرم اول به فرم دوم میفرستم

    \\FrmShowCustomer
    FC.Dr = markazDBDataSet.Customer.Rows[0];

    سپس در رویداد Load فرم دوم textBox ها را مقدار دهی می کنم

    TxtId.Text = Dr["CoId"].ToString();
    TxtFName.Text = Dr["FName"].ToString();
    TxtLName.Text = Dr["LName"].ToString();
    .

    حال:
    1. چگونه فرد انتخاب شده را به فرم دوم بفرستم (بجای 0 چه چیزی بنویسم؟)
    FC.Dr = markazDBDataSet.Customer.Rows[0];
    2. دستورات مقدار دهی به TextBoxها را در رویداد Load فرم نوشته ام. اگر تعداد این دستورات زیاد باشد، سرعت اجرای برنامه گرفته نمی شود؟

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

    پيش فرض

    سلام

    من یک متغیر Public در فرم دوم تعریف کردم
    بله از روشهای قبلیتان بهتر است و قابل بهتر شدن هم است...

    . دستورات مقدار دهی به TextBoxها را در رویداد Load فرم نوشته ام. اگر تعداد این دستورات زیاد باشد، سرعت اجرای برنامه گرفته نمی شود؟
    تمام فیلدهای شما متنی است؟
    نه مشکل خاصی ندارد... معمولاً جاهایی سرعت کم میشود که کاری در حلقه به تعداد مکرر انجام شود.

    . چگونه فرد انتخاب شده را به فرم دوم بفرستم (بجای 0 چه چیزی بنویسم؟)
    یک کامپونت BindingSource روی فرمتان قرار دهید و DataSource و DataMember اش را تایین کنید.
    سپس خود این BindingSource را به عنوان Source به Grid بدهید.

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

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

    پيش فرض

    روشهای قبلیتان بهتر است و قابل بهتر شدن هم است...
    لطفا راه حل بهتر آن را نیز بفرمایید!

    تمام فیلدهای شما متنی است؟
    منظور شما چیست؟
    فیلدهای معمولی مثل Id,FName,LName,... که در TextBox ها نمایش داده می شود!

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

    پيش فرض

    sghl
    لطفا راه حل بهتر آن را نیز بفرمایید!
    اگر من بودم و فقط همین یک DataRow را برای انتقال داشتم، کد زیر را از نظرهای مختلف ترجیح میدادم.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    (البته من کد فوق را ساده کرده ام، ولی شما فراموش نکنید در شرایط خاص امکان دارد مقادیر null باشند و شما باید این شرط را همواره در کدنویسی های خود مدنظر داشته باشید و برای آن if های مطلوبی قرار دهید.)


    منظور شما چیست؟
    فیلدهای معمولی مثل Id,FName,LName,... که در TextBox ها نمایش داده می شود!
    خوب برای فیلدهای متنی TextBox مناسب است
    برای فیلدهای عددی NumericUpDown ...
    برای فیلدهای تاریخی یک کنترلر تاریخی فارسی ...
    برای فیلدی حاوی یک تصویر یک PictureBox با چند دکمه و راست کلیک ...
    و ...

    موفق باشید.

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

    پيش فرض

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

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

    پيش فرض

    سلام
    اینکه خیلی ساده است!!!!!
    برای دکمه های OK/Save و Cancel/Exit در فرم ویرایشی دوم خصیصه DialogResult را پر کنید.
    و در رویداد OK/Save مقادیر کنترلرها را داخل m_DataRow بریزید.
    در واقع فرق برای update و insert نخواهد داشت! و فرم اول باید دستورات مختلفی اجرا کند.

    دستور Update در فرم اول چنین خواهد شد:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    دستور Insert در فرم اول هم چنین خواهد شد:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    این نمونه ای از تعامل منطقی دو فرم است، که هیچیک به متغییرها و کنترلرهای یکدیگر دسترسی ندارند و هر کدام در داخل کد خود مستقل هستند و با انجام تغییرات داخل Form1 و Form2 کد دیگری نیاز به تغییر خاصی نخواهد داشت و این از اصول برنامه نویسی است و قابلیت "نگه داری کد" را به شدت افزایش میدهد و از پیدایش کدهای اسپاگتی مانند جلوگیری میکند.

    (مجدداً تاکید میکنم null بودن مقادیر را بررسی کنید)
    موفق باشید.

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

    پيش فرض

    سلام
    ممنون از پاسخ شما اما شرمنده، منظور بنده را متوجه نشدید!

    ببینید من این دستورات را در فرم دوم نوشته ام
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    فرم دوم دو حالت برای باز شدن دارد
    1. حالت اضافه کردن (اطلاعاتی لازم نیست به این فرم فرستاده شود)
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    2. حالت ویرایش (اطلاعات یک سطر باید به این فرم فرستاده شود)
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    برای حالتی که فرم برای ویرایش اطلاعات باز میشود دستورات بالا باید اجرا شود اما برای حالتی که فرم برای ثبت اطلاعات جدید باز میشود این دستورات نباید اجرا شود!
    این دو حالت را چگونه می توان تفکیک کرد؟
    چون برای حالت اول این دستورات با خطا مواجه میشود!

    باز هم شرمنده!!!


    راستی منظور شما از چک کردن Null بودن مقادیر چیست؟
    آیا این دستور مشکلی دارد؟
    TxtFName.Text = dr["FName"].ToString();
    این فیلد یا مقدار دارد یا ندارد!!!
    اگر مقدار داشته باشد مقدار آن نمایش داده می شود و اگر مقدار نداشته باش چیزی نمایش داده نمی شود!
    Last edited by M-B-M; 07-03-2009 at 00:49.

Thread Information

Users Browsing this Thread

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

User Tag List

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

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

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