ورود

View Full Version : افزودن ایتم به کمبوباکس بایند شده



piroozman
چهارشنبه 20 شهریور 1387, 18:57 عصر
با سلام و احترام خدمت کلیه دوستان عزیز
من در یک برنامه از BindingNavigator استفاده کرده ام. در فرمم یک کمبوباکس دارم که به یکی از ستونهای موجود در یک DataTable موجود در یک DataSet بایند شده است و مقادیر موجود در یکی ستونهای DataTable را نمایش می دهد. در کنار این کمبوباکس یک کلید قرار داده ام. با زدن کلید فرم دیگری باز شده و مقدار مورد نظر کاربر انتخاب شده و به فرم اصلی ارسال می شود. اما مشکل اینجاست که چطوری می تونم مقدار جدید ارسال شده را که از نوع string اس را به داخل کمبوباکس بایند شده به یک DataSource ارسال کنم. البته این رو عرض کنم که هدف ایجاد رکورد جدید است و نه تغییر رکورد جاری. در رکورد جاری برای تغییر مقدار موجود در کمبوباکس به صورت زیر عمل کرده ام:

int i = this.bindingSource.Position;
datset.Tables["Table1"].Rows[i]["cloumn1"] = projectCaption;

projectCaption همان مقدار String است که از فرم دوم به فرم اول پاس شده است.
اما نمی دونم وقتی کاربر برروی کلید AddNew کلیک می کنه چطوری مقدار انتخاب شده از فرم دوم(یا بهتر بگم projectCaption را به داخل کمبوباکس اضافه کنم!
امیدوارم خوب توضیح داده باشم.)

yasercomeng
پنج شنبه 21 شهریور 1387, 02:50 صبح
در كل شما اصلاً نميتونيد اطلاعات يك كنترل كه به يك جدول بايند شده باشه رو ويرايش كنيد يا به آن داده اي اظافه كنيد يا داده را از آن حذف كنيد اشكال semantic داره و exception توليد مي كنه.
شايد بهترين و بدترين كار اينه كه اطلاعات رو تو يه كمبوباكس كه از ديد كاربر مخفي هست بايند كنيد و از يه كمبوباكس كمكي كه به كاربر نشان داده مي شود اطلاعات كمبوباكس اول رو وارد كنيد بعداً مي تونيد رو اين كمبو باكس دومي هر كاري مي خوايد انجام بديد. به غير از اين راهي وجود نداره. موفق باشيد.

eiman_ghasemy
پنج شنبه 21 شهریور 1387, 05:30 صبح
شما باید رو dataset تغیرات مورد نظرتون را بدین نا روی کنترل هایی که بهش بایند شدن تغییر ایجاد کنید

piroozman
پنج شنبه 21 شهریور 1387, 10:06 صبح
شما باید رو dataset تغیرات مورد نظرتون را بدین نا روی کنترل هایی که بهش بایند شدن تغییر ایجاد کنید
سلام دوست عزيز انشالله طاعات و روزه هاي قبول حق باشه
خدمت سرور عزيزم عرض كنم كه من اتفاقاً سعي دارم همين كار رو بكنم. براي تغيير اطلاعات موجود در combobox همونطور كه در كد فوق مي بينيد من يه راست رفتم سراغ datatable و سلول مورد نظر رو پيدا كرده و تغييرات خودم رو اعمال كردم. اما مشكل وقتي كه بخواهم ركورد جديدي اضافه كنم.وقتي كه كاربر بر روي كليد addnew كليك مي كنه؟ آيا رديف جديد به datatable اضافه مي شه؟ من وقتي تعداد رديفها رو بعد از زدن كليد addnew محاسبه كردم ديدم تعداد رديفها اضافه شده است ولي وقتي مي خوام به آخرين رديف ايجاد شده دسترسي پيدا كنم اجازه اين كار رو به من نمي ده و پيغام مي ده كه رديف براي ويرايش وجود نداره!!!
حالا مي خوام بدونم وقتي كه كليد addnew زده مي شده و كاربر مستقيماً شروع به نوشتن اطلاعات درفيلدها مي كنه اين اطلاعات ابتدا در كدوم قسمت وارد مي شوند؟ ضمن اينكه من نمي خوام كاربر به صورت دستي اطلاعات رو در كمبوباكس وارد كنه بلكه قصدم اينه كه اطلاعات مورد نظر خودش رو از فرم ديگه پيدا كرده با انتخاب رديف مورد نظر اطلاعات داخل ركورد جديد و فيلد مورد نظر(combobox) كه در اين مثال همان projectcaption است انتقال صورت بگيره. حال اگر شما ميدونيد كه چطوري مي شه اينكار رو كرد ممنون مي شم راهنماييم كنيد.

piroozman
پنج شنبه 21 شهریور 1387, 10:09 صبح
در كل شما اصلاً نميتونيد اطلاعات يك كنترل كه به يك جدول بايند شده باشه رو ويرايش كنيد
قصد من ويرايش اطلاعات كنترل (در اينجا combobox) نيست بلكه مي خوام اطلاعاتي كه كاربر مدنظر است را، با انتخاب از فرم ديگر به داخل كمبوباكس (و به نوعي به datatable) منتقل كنم. البته اشتباه نشه، اطلاعات رو مي تونم از فرم باز شده به فرم اصلي منتقل كنم فقط نمي دونم چطوري بعد از زدن كليد addnew و انتخاب اطلاعات مورد نظر از فرم جديد اونرو به مخزن اطلاعات وارد كنم.

piroozman
پنج شنبه 21 شهریور 1387, 14:45 عصر
کلاس BindingSource دارای یک خصیصه به نام list است. من فکر می کنم وقتی کلید addnew کلیک می شه یک شی از نوع datarowview به انتهای لیست اضافه می شه. به نظر شما می شه این شی رو که در داخل لیست قرار داره تغییرش داد؟