نوشته شده توسط
f.beigirad
با سلام.
این یه سیمپل از برناممه.
اسم سه تا استان تو کمبو ، لیست میشه.
هر کدوم اینا رو که انتخاب کنیم ، اسامی شهراش توی یه دیتاتیبل لیست میشه.
و 6 تا لیبل اسامی این شهر هارو نشون میدن.
باتن رو که میزنیم 6 تای بعدی رو نشون میده.
برای مثال استان اول 55 شهر داره.54 تا از شهرا که نشون داده میشن ، تعداد لیبل ها 6 تاست اما رکور های باقی مونده یکیه.
برنامه اینجا ارور میده.
چجوری برنامه رو بنویسم که وقتی تعداد رکورد ها تموم شد بقیه ی لیبل هارو خالی کنه و خود برنامه هم ارور نده.
نیاز به یه الگوریتم هس که نمیتونم بنویسمش.
ببخشید نتونستم رو سرور این برنامه آپش کنم.
بفرمایید اینم لینک دانلود :
http://s3.picofile.com/file/7583541177/New.rar.html
از اساتید کمال تشکر رو دارم برای راهنمایی هاشون.
خواهشا یه نگاهی بندازید.
سلام
کد تابع زیر را :
public void LabelRefresh(int i)
{
if (i<5)
{
switch (i)
{
case 0:
label1.Text = "";
label2.Text = "";
label3.Text = "";
label4.Text = "";
label5.Text = "";
label6.Text = "";
break;
case 1:
label1.Text = dt.Rows[row]["shahrname"].ToString();
label2.Text = "";
label3.Text = "";
label4.Text = "";
label5.Text = "";
label6.Text = "";
break;
case 2:
label1.Text = dt.Rows[row]["shahrname"].ToString();
label2.Text = dt.Rows[row + 1]["shahrname"].ToString();
label3.Text = "";
label4.Text = "";
label5.Text = "";
label6.Text = "";
break;
case 3:
label1.Text = dt.Rows[row]["shahrname"].ToString();
label2.Text = dt.Rows[row + 1]["shahrname"].ToString();
label3.Text = dt.Rows[row + 2]["shahrname"].ToString();
label4.Text = "";
label5.Text = "";
label6.Text = "";
break;
case 4:
label1.Text = dt.Rows[row]["shahrname"].ToString();
label2.Text = dt.Rows[row + 1]["shahrname"].ToString();
label3.Text = dt.Rows[row + 2]["shahrname"].ToString();
label4.Text = dt.Rows[row + 3]["shahrname"].ToString();
label5.Text = "";
label6.Text = "";
break;
case 5:
label1.Text = dt.Rows[row]["shahrname"].ToString();
label2.Text = dt.Rows[row + 1]["shahrname"].ToString();
label3.Text = dt.Rows[row + 2]["shahrname"].ToString();
label4.Text = dt.Rows[row + 3]["shahrname"].ToString();
label5.Text = dt.Rows[row + 4]["shahrname"].ToString();;
label6.Text = "";
break;
}
}
else if (i>=5)
{
label1.Text = dt.Rows[row]["shahrname"].ToString();
label2.Text = dt.Rows[row + 1]["shahrname"].ToString();
label3.Text = dt.Rows[row + 2]["shahrname"].ToString();
label4.Text = dt.Rows[row + 3]["shahrname"].ToString();
label5.Text = dt.Rows[row + 4]["shahrname"].ToString();
label6.Text = dt.Rows[row + 5]["shahrname"].ToString();
}
}
به شکل زیر تغییر دهید:
public void LabelRefresh(int i)
{
for (int j = 1; j <= 6; j++)
{
if (j + row < dt.Rows.Count)
{
(this.Controls.Find("label" + j.ToString(), true)[0] as Label).Text = dt.Rows[row + j]["shahrname"].ToString();
}
else
{
this.Controls.Find("label" + j.ToString(), true)[0].Text = "";
}
}
return;}
درضمن چون row به صورت سراسری تعریف شده و به عنوان پارامتر استفاده میشود این تابع نیاز به آرگومنت ندارد. در واقع چون row=i پس میتوانید i را حذف کنید.