چگونگی نمایش اطلاعات دیتاتیبل در 7 تکس باکس
با سلام.
این یه سیمپل از برناممه.
اسم سه تا استان تو کمبو ، لیست میشه.
هر کدوم اینا رو که انتخاب کنیم ، اسامی شهراش توی یه دیتاتیبل لیست میشه.
و 6 تا لیبل اسامی این شهر هارو نشون میدن.
باتن رو که میزنیم 6 تای بعدی رو نشون میده.
برای مثال استان اول 55 شهر داره.54 تا از شهرا که نشون داده میشن ، تعداد لیبل ها 6 تاست اما رکور های باقی مونده یکیه.
برنامه اینجا ارور میده.
چجوری برنامه رو بنویسم که وقتی تعداد رکورد ها تموم شد بقیه ی لیبل هارو خالی کنه و خود برنامه هم ارور نده.
نیاز به یه الگوریتم هس که نمیتونم بنویسمش.
ببخشید نتونستم رو سرور این برنامه آپش کنم.
بفرمایید اینم لینک دانلود :
http://s3.picofile.com/file/7583541177/New.rar.html
از اساتید کمال تشکر رو دارم برای راهنمایی هاشون.
خواهشا یه نگاهی بندازید.
نقل قول: چگونگی نمایش اطلاعات دیتاتیبل در 7 تکس باکس
داداش اگه سورسشو بزاری خیلی راحت تر و زودتر جوابتو می گیری
:چشمک:\\\موفق باشید///:چشمک:
نقل قول: چگونگی نمایش اطلاعات دیتاتیبل در 7 تکس باکس
نقل قول:
نوشته شده توسط
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 را حذف کنید.
نقل قول: چگونگی نمایش اطلاعات دیتاتیبل در 7 تکس باکس
داش واقعا ممنونم.ازش چیزی متوجه نشدم اما کارمو راه انداخت.
داش متاسفانه این تابع رکورد اولو نشون نمیده.یعنی از رکورد دوم شروع به نمایش میکنه.
میشه راهنماییم کنی؟
نقل قول: چگونگی نمایش اطلاعات دیتاتیبل در 7 تکس باکس
سلام
خواهش میکنم
کد را به این صورت تغییر دهید:
public void LabelRefresh(int i)}
for(int j = 0; j < 6; j++){
if(j + row < dt.Rows.Count)
{
(this.Controls.Find("label"+( j+1).ToString(), true)[0] asLabel).Text = dt.Rows[row + j]["shahrname"].ToString();
}
else{
this.Controls.Find("label"+ (j+1).ToString(), true)[0].Text = "";
}}}
نقل قول: چگونگی نمایش اطلاعات دیتاتیبل در 7 تکس باکس
یه دنیا ممنون دوست عزیز.
میشه یکمم این کدارو توضیح بدی؟
(this.Controls.Find("label" + (j + 1).ToString(), true)[0] as Label).Text = dt.Rows[row + j]["SignDesc"].ToString();
this.Controls.Find("label" + (j+1).ToString(), true)[0].Text = "";
نقل قول: چگونگی نمایش اطلاعات دیتاتیبل در 7 تکس باکس
نقل قول:
نوشته شده توسط
f.beigirad
یه دنیا ممنون دوست عزیز.
میشه یکمم این کدارو توضیح بدی؟
(this.Controls.Find("label" + (j + 1).ToString(), true)[0] as Label).Text = dt.Rows[row + j]["SignDesc"].ToString();
this.Controls.Find("label" + (j+1).ToString(), true)[0].Text = "";
خواهش میکنم!
ببینید ما شش label داریم که نامهای آنها label1,label2....label6 هست و باید به آنها مقدار بدهیم، از طرفی هم یک حلقه داریم به نام j که از 0 تا 5 تکرار میشود، متود this.Controls.Find هم که با استفاده از نام کنترل آن را برایمان پیدا میکند. پس در حلقه label + (j+1).ToString() یعنی هر بار یکی از label ها (از label1 تا label6) را میگیریم.
در طرف دیگر هم که میخواهیم از row به بعد شش ردیف را به label متناظرش نسبت دهیم. پس به جای اینکه در شش خط بنویسیم:
table.rows[row+1]...
table.rows[row+2]..
table.rows[row+6]
از متغیر شمارنده حلقه برای دسترسی به شش ردیف استفاده کردیم.
نقل قول: چگونگی نمایش اطلاعات دیتاتیبل در 7 تکس باکس
این قسمت چه کار میکنه؟
, true)[0] as Label)
نقل قول: چگونگی نمایش اطلاعات دیتاتیبل در 7 تکس باکس
این قسمت چه کار میکنه؟
, true)[0] as Label)
نقل قول: چگونگی نمایش اطلاعات دیتاتیبل در 7 تکس باکس
سلام عزیز دل خوشحالم که سوالتو می بینم ببین متد Find مربوط به Control دارای دو آرگومان هست که اولی از نوع string و دومی از نوع bool. وظیفه اولی که مشخصه میره تمام کنترلهای هم نام با آرگومانی رو که براش معلوم کردی بر می گردونه. اون true دوم هم برای اینه که بره تمام Children ها هم آیا بگرده یا نه فقط در سطح اصلی خود فرم جستجو کنه چون آیتمهایی مثل groupbox یا panel هستند که حالت Container دارند و کنترلهای داخلشون از فرم جدا در نظر میاد. در مورد as Label هم باید بگم که این یک تبدیل کننده هستش یعنی control رو که یک حالت عمومی و کلی هستش رو به label که کلاسی اختصاصی هست تبدیل می کنه تا بتونید از خواص و متدهای یک Label استفاده کنید.