343.jpg
سلام به دوستان
همانطور توعکس می بینید میخوام زمانی که هر یک از ایتم های چک لیست باکس انتخاب شد مقدار اون در لیست باکس روبروش نمایش داده بشه وهرموقع هر یک از آیتم های چک باکس از حالت انتخاب خارج شدمقدار اون از لیست باکس حدف بشه
خیلی فوریه
343.jpg
سلام به دوستان
همانطور توعکس می بینید میخوام زمانی که هر یک از ایتم های چک لیست باکس انتخاب شد مقدار اون در لیست باکس روبروش نمایش داده بشه وهرموقع هر یک از آیتم های چک باکس از حالت انتخاب خارج شدمقدار اون از لیست باکس حدف بشه
خیلی فوریه
کسی بلد چی بنویسم کجا تو کدوم رویداد
لطفا کمک کنید
از رویداد آیتم چک استفاده کنید
private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (e.NewValue == CheckState.Checked && !listBox1.Items.Contains(checkedListBox1.Items[e.Index]))
listBox1.Items.Add(checkedListBox1.Items[e.Index]);
else if (e.NewValue == CheckState.Unchecked && listBox1.Items.Contains(checkedListBox1.Items[e.Index]))
listBox1.Items.Remove(checkedListBox1.Items[e.Index]);
}
ممنون این روشی که گفتید تو چک باکس لیست هم جواب می ده؟
اگر منظور شما از "چک باکس لیست" چک لیست باکس هست بله دیگه به کدها نگاه کنید میفهمید. اگر امتحان میکردید نیازی به پرسش دوباره نبود. همانطور که گفتم از رویداد آیتم چک مربوط به چک لیست باکس استفاده کنید.
سلام میخوام هرکدوم انتخاب شد این طوری تو لیست باکس نمایش بده مثلا 20 که انتخاب کردم 20/05/1390 بشه این رو تو add اضافه کردم شد
"1390/05/" + chlist_date.Items[e.Index]
اما زمانی که تیک برمی دارم از لیست کم نمی شه باید تو remove چی بنویسم
توی کد پست3 هر جاcheckedListBox1.Items[e.Index]دیدی به جاش
"1390/05/" + chlist_date.Items[e.Index]بزار.
و یه مورد دیگه ، حالا اطلاعات داخل لیست باکس به صورت تاریخ تو بانک ذخیره شدن ،حالا اگر بخوام اون ها رو از تو بانک بخونم وبریم تو لیست باکس مشکلی نیست ولی چطوری می تونم بگم که اون مورد ها تو چک باکس لیست هم تیک بخوره؟
خیلی ممنونم از جواب های خوبتون
به نظر شما برای ذخیره تاریخ ها تو بانک به تعداد تاریخ ها فیلد تو جدولم بزارم یا یه فیلد از نوع ntext بزارم؟
اکر بخوام بگم کاربر نتونه بیشتر از 10 تا انتخاب داشته باشه چی بنویسم؟
برای ذخیره میتونید تاریخ رو همراه با روزهایی که انتخاب میشه رو به صورت یک رشته در بیارید (با یک کاراکتر خاص مثلا ویرگول روزها و تاریخ رو از هم جدا کنید) و بعد ذخیره کنید. برای بازیابی هم باید برحسب همون کاراکتر رشته را تفکیک کنید. بعد از بدست آوردن تاریخ و روزها میتونید تو یک حلقه تیک بزنید.
1391/03/,5,9,15
حرف n در نوع های داده اسکیو ال به معنای پشتیبانی حروف unicode فارسی()است
فکرکنم nVarChar(20)کافی باشه
برای تعداد 10 مورد در رویداد checkedListBox1_ItemCheck شرط بزار برای تعداد.
هر رشته یک متد داره به نام split
string.split(',');
("رشته").split(',');
رشته ها رو تفکیک کن و در یک ارایه بریز و بعد خانه های ارایه رو بریز هر جا که خاستی.
string[] arrTemp =("field").split(',');
اون پاسخ برای سوالی بود که شما کردید که چطور در دیتابیس(یا هر چیز دیگه) ذخیره کنید که من گفتم نیازی نیست به تعداد روزها (31) ، بیایید توی جدول دیتابیس ستون ایجاد کنید بلکه میتونید یک ستون از نوع varchar تعریف کنید. و اینکه تاریخ رو به همراه روزهایی که در چک لیست باکس تیک خوردند به صورت یک رشته دربیارید و در این ستون جدول ذخیره کنید.
برای بازیابی و اعمال اون روی چک لیست باکس، مقداری که در دیتابیس ذخیره شده رو سلکت میکنید و رشته رو تفکیک کنید و روی چک لیست باکس اعمال کنیدstring st = "1391/03/,5,7,14";در اینجا من st رو با یک مثال پر کردم ، شما باید از مقداری که در دیتابیس ذخیره شده پرش کنید.
private void button4_Click(object sender, EventArgs e)
{
List<string> items = new List<string>(st.Split(','));
items.RemoveAt(0);
foreach ( string s in items)
checkedListBox1.SetItemChecked(checkedListBox1.Ite ms.IndexOf(s) , true);
items = null;
}
سلام
هر دو روش جواب میده.
اگه یه فیلد از نوع ntext (در acceess) و یا از نوع nvarchar(در sql) انتخاب کنید بهتره،البته باید یه کد قراردادی برای خودتون قرار بدید که مثلا بین هر item تاریخ،یه ","بذاری و ذخیره کنی.
موقع بازخوانی از بانک و اعمال اون در برنامه،باید این کد رو دیکد کنی و هر مقدار رو توی یه آرایه ذخیره کنی.
با داشتن یه فیلد،واسه update و یا delete هم راحتتری.چون مقدار آرایه ها رو دوباره جمع میزنی،کد میکنی،میذاری توی یه فیلد.
روش دوم:
استفاده از جدول رابطه ای یک به چند
فیلد تاریخ های انتخاب شده مربوط به این جدول رو در خودش قرار ندی،یه جدول دیگه بساز،از طریق forien key متصل کن به جدول اول و تاریخ ها رو توی اون نگهداری کن.
من باید دو نوع جستجو داشته باشم یکی بر اساس روز وماه ویکی بر اساس ماه حالا که یه رشتخ شده چطوری این کارو بکنم
متوجه شدم حتما به خاطر کدهای داخل chech itme هست.
در مورد جستجو چی؟
میتونید سه ستون داشته باشید یکی برای سال یکی برای ماه و یکی هم برای روزهای انتخابی و برای ذخیره هم میایید روزها رو به یک رشته تبدیل میکنید
1391 03 5,12,3,14برای جستجو براساس ماه یا سال که ساده است .برای جستجو براساس ماه یا سال با روز به اینصورت میتونید عمل کنیدselect * from dbo.tbl where year='سال' and month='ماه' and day like '%روز%'
سلام دوست عزیز
حالا به یه مشکل دیگه برخوردم
زمانی که اطلاعات روز ها فراخوانی میشه چک باکس لیست تیک می خوره وروزهای متناظر تو لیست باکس قرار می گیرن فقط نمی دونم چطور باید اون رشته روز ها رو بدست بیارم (منظورم اینکه روز جدیدی به رشته اضافه کنم ویا زمانی که تیک یه روز برداشتم از رشته روز ها اون رو کم کنه اصلا ایجاد یه رشته از مقادیر چکس باکس لیست چطوریه؟-ویه نکته زمانی که عمل split انجام می شه داده اولی نمایش داد نمی شه؟
ممنون میشه کمک کنید.
با همون حلقه مقادیری که چک خوردن رو میخونی و تبدیل به یک رشته میکنی کاری نداره.
برای اینکه مقادیری که از دیتابیس خوندی و روی چک لیست باکس اعمال کردی ، اگر بخوای تغییر بدی باید رشته رو دوباره ایجاد کنی و اون سطر دیتابیس رو آپدیت کنی.
در مورد split هم کدتون رو قرار بدید.
باتشکر از راهنمایی هاتون
من اطلاعات داخل لیست باکس رو ترکیب کزدم
اینطوری می نویسه
1390/02/01
1390/02/12
حالا اون کدی که تو برنامه بود رو چطوری تغییر بدم:
label3.ResetText();
foreach (string item in listBox1.Items)
{
if (label3.Text == string.Empty)
label3.Text = item;
else
label3.Text += "," + item;
}
و یه مشکل دیگه بانک برنامه باز نشد چه ورژنیه؟
به نظر من ذخیره سازی رو با همون فرمت قبل انجام بدید بهتره و حجم کمتری اشغال میکنه ، فقط زمانی که میخواد به لیست باکس اضافه بشه سال و ماه رو هم بهش اضافه کنید.
دیتابیس هم sqlexpress2008 هست. چیز خاصی نداره یک جدول با ستون هایی که میبینید
همونطوری روزها رو ذخیره می کنم ولی میخوام به کاربر اینطوری تو لیست باکس نشون بده
حالا روزها رو چطور ازش بکشم بیرون؟
یا بهتر نیست از چک لیست باکس ،روزها رو بگیرم؟
کافیه فقط کد رویداد ItemCheck رو به این صورت اصلاح کنیprivate void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)تابع itemstostring رو هم کلا پاک کنید.
{
if (e.NewValue == CheckState.Checked)
{
listBox1.Items.Add(label1.Text + "\\" + label2.Text + "\\" + checkedListBox1.Items[e.Index]);
if (e.NewValue == CheckState.Checked)
if (label3.Text == string.Empty)
label3.Text = checkedListBox1.Items[e.Index].ToString();
else
label3.Text += "," + checkedListBox1.Items[e.Index].ToString();
}
else if (e.NewValue == CheckState.Unchecked)
{
listBox1.Items.Remove(label1.Text + "\\" + label2.Text + "\\" + checkedListBox1.Items[e.Index]);
label3.Text = label3.Text.Replace(checkedListBox1.Items[e.Index].ToString(), "").Replace(",,", ",");
if (label3.Text.StartsWith(","))
label3.Text = label3.Text.Substring(1);
if (label3.Text.EndsWith(","))
label3.Text = label3.Text.Substring(0, label3.Text.Length - 1);
}
}
آخرین ویرایش به وسیله Mahmoud.Afrad : پنج شنبه 01 تیر 1391 در 01:43 صبح