PDA

View Full Version : گرفتن مقادیر ثبت شده در LinkedList



NasimBamdad
جمعه 29 تیر 1397, 00:38 صبح
سلام و خسته نباشید

یک فرم دارم که نزدیک 200 تا چک باکس داره و با استفاده از Telerik RadPageView اونا رو تقسیم بندی کردم و در GroupBox های مختلف قراردادم

CheckBox , GroupBox , RadPageView همگی از جنس Telerik هستند .


برای هر چک باکس یه مقدار منحصر بفرد در نظر گرفتم . که اون رو در خاصیت Tag قراردادم . زمان طراحی . 1 و 2 و3 و4 و ... تا 200

یه رویداد نوشتم و با چک خوردن هر چک باکس مقدار Tag اش در یک LinkedList ذخیره میشه و در نهایت در DataBase ذخیره میشه

موضوع اینه که برای Select کردنش و نمایش چک باکس های تیک خورده مشکل دارم . برای همین یک DataSet گرفتم و بعدش مقادیرش رو به LinkedList انتقال دادم . اما نمی تونم مقایسه کنم که اگه مقداری در LinkedList بود و همه چک باکس ها رو چک کردن اگه مقدار برابری بود اون CheckBox رو تیک بزن

if (ds.Tables[0].Rows.Count > 0)
{
int a = ds.Tables[0].Rows.Count;

for (int i = 0; i < a; i++)
{
lines2.AddLast(ds.Tables[0].Rows[i]["Tags"].ToString());
}

System.Windows.Forms.Control.ControlCollection PanelControls = radPageViewPage1.Controls;
if (PanelControls != null)
{
foreach (Control Item in PanelControls)
{
if (Item.GetType() == typeof(Telerik.WinControls.UI.RadGroupBox))
{
System.Windows.Forms.Control.ControlCollection GroupControls = Item.Controls;
if (GroupControls != null)
{
foreach (Control ItemCheck in GroupControls)
{
if (ItemCheck.GetType() == typeof(Telerik.WinControls.UI.RadCheckBox))
{
if (ItemCheck.Tag == lines2.Find(ItemCheck.Tag.ToString()))
{
((Telerik.WinControls.UI.RadCheckBox)ItemCheck).Ch ecked = true;
}
}
}
}
}
}
}
}
همه چیز داره درست کار می کنه و فقط مشکلم با قسمت اخرش هست .

Mahmoud.Afrad
جمعه 29 تیر 1397, 05:22 صبح
شرطی که در خط 24 نوشته اید اشتباه هست.
از متد contains میتوانید استفاده کنید
foreach (Control item in radPageViewPage1.Controls)
{
var box = item as RadGroupBox;
if (box == null) continue;
foreach (Control itemCheck in item.Controls)
{
var checkBox = itemCheck as RadCheckBox;
if (checkBox == null) continue;
if (!lines2.Contains(checkBox.Tag.ToString())) continue;
checkBox.Checked = true;
}
}

NasimBamdad
جمعه 29 تیر 1397, 12:15 عصر
شرطی که در خط 24 نوشته اید اشتباه هست.
از متد contains میتوانید استفاده کنید
foreach (Control item in radPageViewPage1.Controls)
{
var box = item as RadGroupBox;
if (box == null) continue;
foreach (Control itemCheck in item.Controls)
{
var checkBox = itemCheck as RadCheckBox;
if (checkBox == null) continue;
if (!lines2.Contains(checkBox.Tag.ToString())) continue;
checkBox.Checked = true;
}
}


سپاس فراوان . خیلی خوب کار کرد .

حالا یه سوال دارم . من چندتا از این RadPageView ها دارم . نزدیک 13 تا . الان باید 13 بار این حلقه رو بنویسم و توی هر کدام اندیس بهشون بدم ؟

یا میشه با همچنین کردی اونا رو هم پوشش داد و کد تکراری ننویسم

Mahmoud.Afrad
جمعه 29 تیر 1397, 15:31 عصر
سپاس فراوان . خیلی خوب کار کرد .

حالا یه سوال دارم . من چندتا از این RadPageView ها دارم . نزدیک 13 تا . الان باید 13 بار این حلقه رو بنویسم و توی هر کدام اندیس بهشون بدم ؟

یا میشه با همچنین کردی اونا رو هم پوشش داد و کد تکراری ننویسم

13 تا Page یا RadPageView ؟

اگر 13تا page در یک RadPageView دارید روی پراپرتی Pages با یک حلقه پیمایش کنید.

NasimBamdad
جمعه 29 تیر 1397, 15:35 عصر
اینطوری شد

foreach (Control item in radPageView1.Controls)
{
var page = item as Telerik.WinControls.UI.RadPageViewPage;
if (page == null) continue;

foreach (Control pgw in page.Controls)
{
var box = pgw as Telerik.WinControls.UI.RadGroupBox;
if (box == null) continue;

foreach (Control itemCheck in box.Controls)
{
var checkBox = itemCheck as Telerik.WinControls.UI.RadCheckBox;
if (checkBox == null) continue;

if (linesCH.Contains(checkBox.Tag.ToString()))
{
checkBox.Checked = true;
}
else
{
checkBox.Checked = false;
}
}
}
}

Mahmoud.Afrad
جمعه 29 تیر 1397, 16:05 عصر
اینطوری شد

foreach (Control item in radPageView1.Controls)
{
var page = item as Telerik.WinControls.UI.RadPageViewPage;
if (page == null) continue;

foreach (Control pgw in page.Controls)
{
var box = pgw as Telerik.WinControls.UI.RadGroupBox;
if (box == null) continue;

foreach (Control itemCheck in box.Controls)
{
var checkBox = itemCheck as Telerik.WinControls.UI.RadCheckBox;
if (checkBox == null) continue;

if (linesCH.Contains(checkBox.Tag.ToString()))
{
checkBox.Checked = true;
}
else
{
checkBox.Checked = false;
}
}
}
}

میتونید در خط اول مستقیم روی radPageView1.Pages حلقه را اجرا کنید تا نیازی به تبدیل(خط3و4) هم نباشد






پ.ن:
از تگ مناسب برای کدها استفاده کنید. برای اینکه فقط متن و نه استایل کپی بشه متن را به ویرایشگری مثل نوت پد منتقل و از اونجا کپی کنید.

NasimBamdad
جمعه 29 تیر 1397, 17:48 عصر
سپاس فراوان .

حالا با این مدل که با کمک کد شما نوشتم و متد Contains چه طوری میشه مقداری که Contains پیدا کرده رو در یک String سیو کنیم ؟



if (linesCH.Contains(checkBox.Tag.ToString()))
{
checkBox.Checked = true;
}
else
{
checkBox.Checked = false;
}



این قسمت که Contains هست .در واقع داره یک مقدار bool می فرسته . چه طوری میشه اون خطی که در LinkedList پیدا شده ، مقدار اون خط رو هم داخل یه String داشته باشم ؟

NasimBamdad
شنبه 30 تیر 1397, 17:13 عصر
مشکلم حل شد . بهتره از Dictionary استفاده کنید .