PDA

View Full Version : حرفه ای: ComboBox in DataGridView



araz_pashazadeh
چهارشنبه 08 آذر 1391, 17:29 عصر
با عرض سلام وخسته نباشید خدمت دوستان.
من در قسمتی از برنامه اطلاعات را در ستونی که از نوع ComboBox هست در داخل گرید ویو بایند می کنم و درج اطلاعات هم از قمست پایین(سطر مخصوص در اطلاعات در گرید) انجام می دهم.
مشکل از اینجا شروع میشه که وقتی کابر ایتم مورد نظر خود را از گرید انتخاب کرد و اینتر را زد همون ایتم در سطر پایین گرید که مخصوص درج هستش نمایش داده میشه و یا وقتی سطری را انتخاب می کند و بعد سطر دیگه ای را انتخاب می کند وتن سطر قبلی روی سطر فعلی کپی میشه.
چطوری میتونم تکستی که هست را پاک کنم ویا از حالت انتخاب خارج کنم؟

plus
چهارشنبه 08 آذر 1391, 19:28 عصر
وقتی شما در یکی از سطر های جاری، یک آیتم رو از ComboBox انتخاب کنی، وقتی میری توی سطر جدید و ComboBox رو باز میکنی همون آیتم قبلیه به عنوان آیتم پیش فرض انتخاب شده ولی به سلول اون مقدار داده نمیشه یعنی تا کاربر اون انتخاب نکنه اون مقدار به سلول داده نمیشه. مشکل شما همینه که اون آیتم به عنوان آیتم پیشفرض نمایش داده نشه؟

araz_pashazadeh
پنج شنبه 09 آذر 1391, 18:24 عصر
مشکل شما همینه که اون آیتم به عنوان آیتم پیشفرض نمایش داده نشه؟
ممنون از راهنمایی شما دوست عزیز اینو می دونم ولی چطوری از حالت انتخاب در بیارم؟
در کدام رخداد گرید؟
هر کاری کردم موفق به انجام این کار نشدم ممنون میشم اگه تکه کد و یا نمونه برنامه ای در این مورد قرار بدین.

plus
پنج شنبه 09 آذر 1391, 19:09 عصر
شما باید رویداد EditingControlShowing رو هندل کنید:


private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control is DataGridViewComboBoxEditingControl)
{
if (dataGridView1.CurrentCell.Value == DBNull.Value)
((DataGridViewComboBoxEditingControl)e.Control).Se lectedIndex = -1;
}
}

araz_pashazadeh
شنبه 11 آذر 1391, 13:03 عصر
من ازتک کد بالا استفاده کردم به نظر من رخدادی که شما نوشتین درست نیست.
چون زمانی که من سطرها را عوض می کنم می خوام مقدار سطر قبلی روی سطر فعلی کپی نشه ولی این رخداد فقط زمان ویرایش کار می کنه مثل RowLeave و یا RowValidated ، ...
در ضمن من از تکه کد شما در RowLeave استفاده کردم باز مقدار را در سلول های بعدی تکرار می کرد حتی ستون آخر که مخصوص درج رکورد جدید.

plus
شنبه 11 آذر 1391, 18:41 عصر
خوب معلومه که فقط زمان ویرایش کار میکنه، شما تا سطر جدید رو در حالت ویرایش نبری که ComboBox ظاهر نمیشه .

araz_pashazadeh
دوشنبه 13 آذر 1391, 18:47 عصر
من قبلا هم گفتم دوست عزیز وقتی روی سطرها حرکت می کنم اطلاعات سطر قبلی روی سطر فعلی کپی مشه.
دراین زمان من چیزی را ویرایش می کنم.
چطوری میشه این مشکل را حل کرد؟

plus
دوشنبه 13 آذر 1391, 20:04 عصر
من متوجه منظور شما نمیشم. همینطوری که مقدار یه سطر روی سطر دیگه کپی نمیشه...شما شاید کدت مشکل داره!

araz_pashazadeh
چهارشنبه 15 آذر 1391, 17:05 عصر
من متوجه منظور شما نمیشم. همینطوری که مقدار یه سطر روی سطر دیگه کپی نمیشه...شما شاید کدت مشکل داره!
دوست عزیز منظور من کاملا واضح هستش من برای این قسمت اصلا کدی ننوشتم که اشتباه باشه اگه بود حتما قرار می دادم تا شما ببینین.
من در داخل گرید یک ستون از نوع DataGridViewComboBoxExColumn قرار دادم که به دیتا بیس جداگانه بایند می کنم و اطلاعات من بصورت دراپداون لیست برام نمایش داده میشن.
تا ایجای کار مشکلی نیست وقتی کاربر از گرید سطری را انتخاب میکنه مقدار موجود در دراپداون ،مثلا سیب هستش در سطر بعدی که در بار دوم انتخاب کرده در اون هم مقدار انگور هستش کپی میشه.
به همیمن سادگی این مشکل من.
در واقع اطلاعات دو تا سطر اول برروی سطر دوم کپی شد.
اینم در نظر بگیرید که فقط ستون مربوط به دراپداون اینطوری میشه.

plus
چهارشنبه 15 آذر 1391, 18:32 عصر
احتمالا شما درست داده رو به ComboBox بایند نکردین. دیتاسورس ComboBox و مقداری که از DataSource گرید به اون سلول میره رو بررسی کنید ببینید جزو آیتم های ComboBox (با توجه به ValueMember)هست اصلا؟

araz_pashazadeh
پنج شنبه 16 آذر 1391, 09:05 صبح
این تکه کدی که من برای بایند کردن اطلاعات استفاده می کنم:



//Set the source table.
UIBaseFruitTypes.dtSource = BLL.Delivery.GetFruitType("", "", "FruitTypes").Tables["FruitTypes"];
ComboFruitTypeG.DataSource = UIBaseFruitTypes.dtSource;
ComboFruitTypeG.DisplayMember = "FruitType";
ComboFruitTypeG.ValueMember = "FruitType";