PDA

View Full Version : داشتن DataGridView با قابلیتهای خاص



amir_pro
سه شنبه 23 بهمن 1386, 23:42 عصر
سلام به دوستان
می خواهم DataGridView به صورت زیر باشد ولی...
1) دو تا از ستونها به صورت combobox -برای نشان دادن اطلاعات داخل DGV از کد زیر استفاده کردم ولی چون دو تا از ستونها را از نوع combobox گذاشتم پیغام خطا می دهد


OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=HesabDary.mdb");
OleDbDataAdapter da = new OleDbDataAdapter("select numfactor,sanad,buydate,namekala,tedad,ghvahed,mod el,mablaghkala from anbar", con);
DataTable dt = new DataTable();

dt.Clear();
da.Fill(dt);
DgvShow.DataSource = dt;


می خواهم یکی از ستونهای DGV که نام کالا است و به صورت combobox می باشد را از طریق کد پر کنم و بعد از پر کردن با انتخاب هر یک از آیتمها دستور select ای مبنی بر اینکه چه کالایی را انتخاب کرده ام انجام شود و خروجی select را در ستون بعدی که آن هم به صورت combobox hsj ffdkl ولی خطا می دهد.

2)در چه رویدادی از DGV باید دستورات ثبت در بانک را بنویسم که وقتی کاربر سطری را وارد کرد بعد از پر شدن تمام سلولهای آن سطر، سطر به بانک اضافه شود؟

3) نوشتن رویداد برای ستونی که به صورت Combobox است.

amir_pro
چهارشنبه 24 بهمن 1386, 11:51 صبح
از دوستان کسی نمیتونه راهنمایی کنه؟

amir_pro
پنج شنبه 25 بهمن 1386, 11:08 صبح
از عزیزان و اساتید برنامه نویس کسی نمیتونه راهنمایی کنه؟
جناب sinpin و جناب razavi شما هم نمیتونید راهنمایی بفرمایید.

tiktikboom
پنج شنبه 25 بهمن 1386, 17:19 عصر
سلام دوست عزیز..من برنامه نویسی با سی شارپ رو تازه شروع کردم. با ابزار ها و قابلیت های اون هنوز آشنایی کامل ندارم.
اما خوب چون دوستان احتمالا پست شما رو ندیدن تا جواب شما رو بدن بگذارید من حداقل ایده مو بگم تا یکی پیدا بشه به داد شما برسه.
اول بگم چرا شما این کد رو استفاده کردید؟ دلیل خاصی داره؟ چون حدس میزنم با ساخت این شی مقدار پیش فرضش خالیه...


dt.Clear();

در مورد کمبو باکس.
خوب شما میتونید بطور غیر مستقیم از یک کمبو باکس دیگه استفاده کنید. یعنی اینکه به غیر از گرید یک کمبو باکس هم توی فرمتون قرار بدید. توی رویداد کلیک گرید هم چنانچه سلول انتخاب شده از ستون مورد نظر بود کمبوی شما بر اساس اندازه و مختصات سلول انتخاب شده ظاهر بشه. تمام این امکانات هم توی متدهای گرید وجود داره. با این روش هم از پیچیدگی برنامه تون کم میشه هم سرعت لود برنامه تون بیشتر میشه چون شی گرید شما حجم کمتری میگیره. فکر کنم با این روش جواب سوال سوم شما هم خود بخود داده میشه.
اما سوال دوم شما... میتونید در رویداد KeyDown اینطور بنویسید که اگر کلید اینتر زده شد و Current Column برابر با ستون آخر یا همون DgvShow.Columns.Count شد عملیات مورد نظر شما انجام بشه. یا اینکه اگر DgvShow.CurrentCell.ColumnIndex==DgvShow.Columns.C ount صورت گرفت هم می تونید بجای عبارت دوم شرط بنویسید منتها خودتون میدونید که مقدار کانت باید یک عدد کم بشه.

Mahdi.Kiani
پنج شنبه 25 بهمن 1386, 17:25 عصر
بدون دات نت نوشتم
ببین جواب میده؟
فرض کردم که یک گرید داری با یک column از جنس combo
اسم جدولت هم A گرفتم با 2 تا فیلد code و name
اسم دیتا بیس هم test

اگر نوع ستون هات با هم فرق بکنه .. مثلا 2 تا ستون که یکیش از نوع textBox (حالت پیش فرض) و دیگری از نوع combo باشع اون موقع کار یکمی مشکل تر میشه .. ولی قابل حل هست

اگه فرصت شد یه نمونه برات می نویسم و می فرستم .. این را فقط جهت ایده گرفتن نوشتم





SqlConnection con = new SqlConnection("server=(local);database=test;integrated security=true;");
SqlDataAdapter da = new SqlDataAdapter("select * from A", con);
DataTable dt = new DataTable();
da.Fill(dt);
DataGridViewComboBoxColumn col = (DataGridViewComboBoxColumn)dataGridView1.Columns[0];
col.DataSource = dt;
col.DisplayMember = "name";
col.ValueMember = "code";

amir_pro
پنج شنبه 25 بهمن 1386, 23:36 عصر
واقعا ممنون جناب r.kiani-راه حل جالبی ارایه دادید- سعی می کنم خودم کامل کنم - اگر انشاالله تونستم همینجا میذارم-
یک سوال راجع به رهنمودی که فرمودید:
داخل DGV, 8 تاستون است که ستون 3 و 4 به صورت combo است و بقیه به صورت textbox - می خوام وقتی کاربر از داخل اولین combo مقداری را انتخاب کرد یک select بر اساس مقدار انتخاب شده انحام دهم. چه طوری میشه برای این نوع combo ها کد نوشت؟
با تشکر

amir_pro
جمعه 26 بهمن 1386, 01:15 صبح
جناب r.kiani و دوستان عزیز
پیغام خطای زیر را می دهد

و برنامه هم گذاشتم-از دوستان تقاضا دارم برنامه را ببینند و اگر می توانند راهنمایی فرمایند

amir_pro
جمعه 26 بهمن 1386, 03:01 صبح
دوستان کدهای این برنامه را از داخل msdn پیدا کردم-اگر ببینید میفهمید که خواسته ی من چیه.
جناب کیانی:
یک DGV که در حدود 12 فیلد داره که 2 تا combobox و 1 image و بقیه اش textbox است-

ولی نتونستم بفهمم چه طوری کار میده؟

Mahdi.Kiani
جمعه 26 بهمن 1386, 11:27 صبح
واقعا ممنون جناب r.kiani


خواخش می کنم..
راستی اسم و فامیل من در امضام هست :چشمک:


جناب r.kiani و دوستان عزیز
پیغام خطای زیر را می دهد

و برنامه هم گذاشتم-از دوستان تقاضا دارم برنامه را ببینند و اگر می توانند راهنمایی فرمایند

من که گفتم این تکه کد فقط در زمانی که یک ستون در گرید داشته باشین جواب میده


دوستان کدهای این برنامه را از داخل msdn پیدا کردم-اگر ببینید میفهمید که خواسته ی من چیه.
جناب کیانی:
یک DGV که در حدود 12 فیلد داره که 2 تا combobox و 1 image و بقیه اش textbox است-

ولی نتونستم بفهمم چه طوری کار میده؟

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

amir_pro
جمعه 26 بهمن 1386, 12:26 عصر
واقعا ممنون جناب کیانی واقعا مشکلم را 60% حل کرد
ولی یک سوال:
چرا نمیشه برای ستونی که به صورت combo است ، رویدادی را انتخاب و کدی برایش نوشت؟ فقط رویداد dispose را دارد.
می خواهم وقتی یکی از مقادیر combo اولی را انتخاب کرد، یک select بر اساس مقدار انتخاب شده انجام دهد و نتیجه را داخل combo دومی نشان دهد. ولی نمیدانم کجا و در کدام رویداد باید کد مربوطه را بنویسم

amir_pro
جمعه 26 بهمن 1386, 13:21 عصر
دوستان چه طوری باید برای ستونی که به صورت combobox است رویدادی را تعریف و در آن کد بنویسیم؟

Mahdi.Kiani
جمعه 26 بهمن 1386, 13:56 عصر
واقعا ممنون جناب کیانی واقعا مشکلم را 60% حل کرد

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



ولی یک سوال:
چرا نمیشه برای ستونی که به صورت combo است ، رویدادی را انتخاب و کدی برایش نوشت؟ فقط رویداد dispose را دارد.
می خواهم وقتی یکی از مقادیر combo اولی را انتخاب کرد، یک select بر اساس مقدار انتخاب شده انجام دهد و نتیجه را داخل combo دومی نشان دهد. ولی نمیدانم کجا و در کدام رویداد باید کد مربوطه را بنویسم


برای این مورد داخل رویداد های دیتا گرید بگرد..شاید چیز به درد بخوری پیدا کردی..مثلا cellendedit یا ....
(البته یه کار کثیف هم میشه کرد، :شیطان: ولی چون زیادی کثیفه، ترجیح می دم اینجا نگم واگر خواستی ایمیل بزن تا بهت بگم)

در مورد برنامه خودت هم، خوب وقتی شما خاصیت enableEditing را false کردی، خوب معلومه که combo مربوط به کالا نباید باز بشه.. اگر روی سطر ها گرید، راست کلیک کنی و گزینه اضافه کردن را بزنی، اون وقت می بینی که در سطر جدید که برات باز میشه، می تونی combo مربوط به کالا را باز کنی
اگر هم می خوای که کاربر بتونه سطر های قبلی (1و2) را ویرایش کنه، یعنی بتونه COMBO مزبوط به کالا را باز کنه، enableEditing را true بذار :لبخند::شیطان:
موفق باشید

amir_pro
جمعه 26 بهمن 1386, 20:54 عصر
در مورد برنامه خودت هم، خوب وقتی شما خاصیت enableEditing را false کردی، خوب معلومه که combo مربوط به کالا نباید باز بشه.. اگر روی سطر ها گرید، راست کلیک کنی و گزینه اضافه کردن را بزنی، اون وقت می بینی که در سطر جدید که برات باز میشه، می تونی combo مربوط به کالا را باز کنی
اگر هم می خوای که کاربر بتونه سطر های قبلی (1و2) را ویرایش کنه، یعنی بتونه COMBO مزبوط به کالا را باز کنه، enableEditing را true بذار
موفق باشید


پست 10 را برای همین پاک کردم-چون همون موقع به اشتباهم پی بردم.
در ضمن ایمیل هم فرستادم

Mahdi.Kiani
جمعه 26 بهمن 1386, 21:39 عصر
پست 10 را برای همین پاک کردم-چون همون موقع به اشتباهم پی بردم.


من بعد از اون که جواب را فرستادم دیدم که شما پستتون را پاک کردین




در ضمن ایمیل هم فرستادم



جواب فرستاده شد.. اما به کسی نگو :چشمک::شیطان: