PDA

View Full Version : استفاده از Checkboxlist



simorgh-hossein
شنبه 24 فروردین 1392, 19:13 عصر
بنام خدا

سلام به همه دوستان برنامه نویس

عزیزان فرض کنید که می خواییم یه دفترچه تلفن طراحی کنیم که اعضا در اون بصورت گروه بندی شده ذخیره

بشن !

1 جدول بنام Groups داریم و 1 جدول بنام NoteTells داریم و 1 جدول بنام NvG داریم که کلید جدول Groups و

NoteTells در اون نگهداری میشه ! ( برای عملیات join و جستجو و البته گروه بندی و ...)

مثلا فردی هم عضو گروه "دوستان" و هم عضو گروه "خبرنگاران" هست !

بنظر شما برای اینکار چطوری میتونم از Checkboxlist یا هر نوع کنترل دیگه ای استفاده کنم !

ممنون میشم راهنماییم کنید !

veniz2008
شنبه 24 فروردین 1392, 19:40 عصر
سلام.
الان مشکل شما سمت طراحی فرم و استفاده از شی مناسب هست یا مشکل طراحی دیتابیس دارید؟!.
چیزی که من متوجه شدم مشکل شما در طراحی فرم و استفاده از شی مناسب هست. خیلی فرقی نداره که بخواید از چک باکس معمولی استفاده کنید یا checklistbox بزارید. اینجا سلیقه ای هست. اگر میخواید از checklistbox استفاده کنید با کد زیر میتونید به گزینه های تیک زده شده دسترسی داشته باشید(ولی به نظرم دردسرش نسبت به چک باکس معمولی بیشتر باشه!).

string s = "";
for (int i = 0; i < checkedListBox1.CheckedItems.Count; i++)
{
s += "'" + checkedListBox1.CheckedItems[i].ToString()+ "',";
}
s = s.Remove(s.Length - 1, 1);
MessageBox.Show(s);
موفق باشید.

simorgh-hossein
شنبه 24 فروردین 1392, 22:12 عصر
آخه چطور از Checkbox معمولی استفاده کنم ؟
اطلاعات گروه ها که محدود نیستند !
امکان داره 20 تا یا شاید هم بالای 20 تا گروه داشته باشم !
در اینصورت باید 20تا Checkbox روی فرم بذارم که اونم نمیدونم شاید تعداد گروه ها کم یا زیاد بشن !
نه با checkbox معمولی هیچوقت نمیشه !
کدی رو هم زحمت کشیدین و گذاشتین چک میکنم ببینم میشه ؟!
بازهم ممنون بابت پاسختون ! :تشویق:

simorgh-hossein
یک شنبه 25 فروردین 1392, 09:48 صبح
آقا این کدی رو که گفتی تست کردم جواب داد !
البته اطلاعاتی رو که می داد تو دیتابیس ذخیره کردم !
حالا اگه بخواییم اطلاعاتی که تو دیتابیس با علامت کاما (,) از هم جدا میشن رو دوباره رو Checkboxlist اعمال کنیم (یعنی اونایی که تو این رشته هستند چک بخورند) ، چیکار باید بکنیم ؟؟؟ :متفکر:

veniz2008
یک شنبه 25 فروردین 1392, 10:08 صبح
حالا اگه بخواییم اطلاعاتی که تو دستابیس با علامت کاما (,) از هم جدا میشن رو دوباره رو Checkboxlist اعمال کنیم (یعنی اونایی که تو این رشته هستند چک بخورند) ، چیکار باید بکنیم ؟؟؟ :متفکر:
حالا به جایی رسیدید که به اون حرف من میرسی که گفتم مدیریت کردن checklistbox سخت تر از چک باکس معمولی هست.
طراحی جدول شما به چه صورته؟
شما زمانیکه برنامه رو به دست مشتری میدید تمام گروه ها مشخص شده؟

simorgh-hossein
یک شنبه 25 فروردین 1392, 14:37 عصر
دوست عزیز گفتم که یه جدول بنام Groups و یه جدول بنام Numbers و یه جدول بنام NvG دارم که نتیجه join ی 2 جدول قبلی در این جدول نگهداری میشه !
نه گروه ها مشخص نشده که !
اصلاً از لحاظ منطقی درست نیست که مشخص بشن !
شاید یه مشتری بخواد خودش گروه ها رو دلخواه وارد کنه !!
بنظرت باید چیکار کرد ؟:متفکر:

veniz2008
یک شنبه 25 فروردین 1392, 15:32 عصر
ببینید چون تعداد گروه های شما مشخص نیست و کاربر میتونه خودش گروه اضافه کنه پس در جدول NvG هم نمیشه تعداد ستون ثابت (برای گروه ها) در نظر گرفت و باید برای یک شخص چندین رکورد رو ثبت کرد.(مواظب افزونگی جدولتون باشید).
شما باید کار با checklistbox ها و صد البته کار با ایجاد اشیا بصورت RunTime رو یاد بگیرید. یعنی اگر 10 گروه داشتید، اونوقت 10 آیتم اضافه بشه به checklistbox و اگر 2 تا دیگه اضافه شد اونموقع بشه 12 آیتم.
تاپیک زیر رو بببیند. میتونه یه ایده بهتون بده.
http://barnamenevis.org/showthread.php?392154-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88%DB%8C-%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87-%D8%AF%D8%B1-%D8%A8%D8%A7%D9%86%DA%A9-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA%DB%8C

simorgh-hossein
دوشنبه 26 فروردین 1392, 01:16 صبح
ممنون دوست عزیز بخاطر زحمتی که کشیدین و پاسخ دادین !
اون لینکو هم نگاه کردم ! خیلی خوب بود !
داشتم تو سایت های مختلف میگشتم که این ایده بنظرم رسید !
میخوام اگه ممکنه نظرتون رو درباره این ایده بگید ! :تشویق:
تو پست شماره 2 شما یه تیکه کد گذاشتین که میشد نام CheckboxListها رو بدست آورد ! ( اونایی که تیک خوردن )
اول یه فیلدی رو تو جدول Numbers بنام Groups گذاشتم که این مقادیر رو ( اون CheckBoxLstهایی که انتخاب شده اند ) تو همون فیلد ذخیره کنه !
بعد هنگام بازیابی با دستور Split میام و اون رشته ای که تو فیلد Groups ذخیره کردمو تو حلقه ForEach تست میکنم و اونایی که باهم مرتبط هستند چک میزنم !
فکر کنم این بهترین روش باشه البته با کمک شما دوست عزیز و گل :بوس: به چند دلیل :
1- جدول NvG کلاً حذف میشه !
2 - دیگه هیچگونه افزونگی بوجود نمیاد و فقط یک فیلد بنام Groups به جدول Numbers اضافه میشه که فکر میکنم چندان مشکلی نداشته باشه و خوب هست !
دوست گلم اگه نظرتون رو بدین ممنون میشم ! :قلب:

veniz2008
دوشنبه 26 فروردین 1392, 10:26 صبح
یه توضیح درباره هر کدوم از جداولتون بدید که دقیقا برای چه منظوری ساخته شدن.
مثلا جدول Numbers چیه؟ ( مشتری ها هستند؟ یا چیز دیگه؟).
جدول NvG چی هست؟ و براش چه نقشی رو متصور شدید؟
هر چقدر کاملتر توضیح بدید بهتر میتونیم راهنمایی کنیم.

simorgh-hossein
دوشنبه 26 فروردین 1392, 18:49 عصر
جدول Numbers حدولی هست که توش اطلاعاتی نظیز نام ، نام خانوادگی ، شماره موبایل و ... ذخیره میشن !
تو جدول Groups کد گروه و نام گروه ذخیره میشه !
من میخواستم از جدول NvG برای عملیات join استفاده کنم که شامل فیلد های CodeF برای جدول Numbers و CodeG برای جدول Groups هست !
ولی گفتم که ایده جدید برای اینکار رو تو پست 8 براتون توضیح دادم !
حالا اگه میشه نظرتون رو راجع به ایده ای که توضیح دادم بفرمائید !
ممنون میشم بیشتر راهنماییم کنید !

veniz2008
دوشنبه 26 فروردین 1392, 20:46 عصر
طبق اصول طراحی دیتابیس ها هر جدول توصیف کننده یک موجودیت یا یک رابطه هست. در جدول اعضا (Numbers ) باید مشخصات اعضا ثبت بشه و نه علاقه مندی های اونها (ثبت کد گروه های مورد علاقه شخص در این جدول اشتباه هستش چون خودش یک موجودیت جداست).
بنابراین نیاز هست که جدول سومی داشته باشید شامل : کد کاربر، کد گروه،تاریخ عضویت و ... (میتونید کلید رو ترکیبی بگیرید ولی بهتر اونه که یک فیلد identity بعنوان کلید بگیرید و اون دو فیلد رو unique کنید).

simorgh-hossein
سه شنبه 27 فروردین 1392, 02:42 صبح
خوب اگه طبق گفته شما عمل بشه که اصولی هم هست ، تو نمایش و ثبت گروه ها توسط CheckboxList چطوری باید عمل کنم ؟
یا از چه ابزار دیگه ای برای اینکار استفاده کنم ؟؟؟ و نحوه ثبت و بازیابی اطلاعات توسط ابزار استفاده شده !
ممنون میشم راهنماییم کنید ! :لبخندساده:

veniz2008
سه شنبه 27 فروردین 1392, 12:41 عصر
برای نمایش گروه ها باید لیست گروه ها رو با یک select بگیری و درون checklistbox درج کنی.
تنها نکته ای که باید در قسمت درج رعایت کنید اینه که کد هر گروهی که کاربر انتخاب میکنه رو بدست بیارید و در دیتابیس درج کنید.
برای درج گروه ها در چک لیست باکس (چیزی که کاربر باید ببینه) :

SqlConnection con = new SqlConnection("server = .\\md2008;database = Test1;Integrated Security = True");
SqlDataAdapter da = new SqlDataAdapter("Select * from TblGroups", con);
DataTable dt = new DataTable();
da.Fill(dt);
((ListBox)ChkGroups).DataSource = dt;
((ListBox)ChkGroups).DisplayMember = "GroupName";
((ListBox)ChkGroups).ValueMember = "GroupID";
برای نشخیص id مربوط به گروه های انتخاب شده هم از کد زیر استفاده کن :


for (int i = 0; i < ChkGroups.CheckedItems.Count;i++)
{
MessageBox.Show(Convert.ToInt32(((DataRowView) ChkGroups.CheckedItems[i])["GroupID"]).ToString());
}
باور کنید برای همین چند خط کد، 3 ساعت بدون وقفه پای سیستم بودم!. هیچ جا نتونستم یه کد 100 درصد آماده پیدا کنم.(به این میگن یه شی بدقلق)
امیدوارم مشکلتون رو حل کنه.
موفق باشید.