PDA

View Full Version : سوال: چطور چندین label را با یک دستور داخل یک حلقه for مقداردهی کنی؟



mohsencom
جمعه 19 فروردین 1390, 20:43 عصر
با سلام

چطوری میشه مثلا 5 تا label رو در یک حلقه for مقداردهی کنیم؟

یه چیزی شبیه کد زیر که البته سینتکس label(i).text غلطه :

For i = 1 To 5
Label(i).Text = ds.Tables(0).Rows(i).Item(i)
Next

mc_laren
شنبه 20 فروردین 1390, 14:46 عصر
For i = 1 To 5
Me.Controls("Lable" + i.ToString) = ds.Tables(0).Rows(i).Item(i)
Next

mohsencom
شنبه 20 فروردین 1390, 17:56 عصر
ممنون دوست عزیز ولی کدی که گذاشتین ارور زیر رو داد...ممنون میشم بفرمایین چطوری رفعش کنم

mohsencom
یک شنبه 21 فروردین 1390, 17:55 عصر
کسی نمیدونه چطوری باید این ارور رو رفع کنم؟ :ناراحت:

shadi khanum
یک شنبه 21 فروردین 1390, 18:47 عصر
ممنون دوست عزیز ولی کدی که گذاشتین ارور زیر رو داد...ممنون میشم بفرمایین چطوری رفعش کنم
دستور رو اینجوری بنویسید مشکلتون حل میشه
For i = 1 To 5
Me.Controls("Lable" + i.ToString).Text = ds.Tables(0).Rows(i).Item(i)
Next

mohsencom
یک شنبه 21 فروردین 1390, 19:50 عصر
دوست عزیز ممنونم
اون ارور رفع شد یه ارور دیگه داد :گریه:

اینو دیگه نمیدونم چیکارش کنم،ایندکس های مختلفی واسه rows و item امتحان کردم اما جواب نداد :ناراحت:
نمیخوام 100 تا label رو دستی مقداردهی کنم :ناراحت:

shadi khanum
یک شنبه 21 فروردین 1390, 23:16 عصر
دوست عزیز باید هم error بده، باید ینویسی ds.tables(0).rows(i).item(0) البته اون For i = 1 to 4 هم اشتباه . باید بنویسی
for i = 0 to ds.table(0).rows.count-1

mohsen12345
دوشنبه 22 فروردین 1390, 00:10 صبح
با سلام

چطوری میشه مثلا 5 تا label رو در یک حلقه for مقداردهی کنیم؟

یه چیزی شبیه کد زیر که البته سینتکس label(i).text غلطه :

For i = 1 To 5
Label(i).Text = ds.Tables(0).Rows(i).Item(i)
Next


بهترین راه استفاده از Foreach هستش

mohsencom
دوشنبه 22 فروردین 1390, 01:30 صبح
دوست عزیز باید هم error بده، باید ینویسی ds.tables(0).rows(i).item(0) البته اون For i = 1 to 4 هم اشتباه . باید بنویسی
for i = 0 to ds.table(0).rows.count-1

دوست عزیز بازم همون ارور قبلی رو داد...دقیقا کد شمارو هم نوشتم

ببینید کلا اگه نگاه کنید دستور غلطه....
بیاین بصورت دستی این دستور رو debug کنیم.....
row که نمایانگر سطره و item هم نمایانگر فیلد

در بار اول i=0.....
در سمت چپ:
اولین label مساوی است با label0....
در سمت راست:
اگه rows(i).item(0) داشته باشیم میره به سطر اول که اندیسش 0 هست...item(0) هم که id هست و مقدارش وارد label0 میشه

اما نکته اینجاست که بار دوم که i=1
در سمت چپ:
اولین label مساوی است با label1....
در سمت راست:
میشه row(1) یعنی سطر دوم و باز هم فیلد ID وارد label میشه

اینا همه در صورتی هست که دستور select من فقط شامل ID نیست

واقعا دیگه نمیدونم چکار کنم....:گریه:
اگه میشه خودتون امتحان کنین ببینین واقعا اصلا میشه با حلقه for مقادیر رو از دیتابیس به label انتقال داد....این ارور مانع بزرگی شده واسم :ناراحت:

mc_laren
دوشنبه 22 فروردین 1390, 14:45 عصر
شرمنده دوست عزیز اون روز با عجله جواب دادم یک نکته کوچیک یادم رفت ولی جواب درست این تکه کد میشه:

For i = 1 To 5
Me.Controls("Label" + i.ToString).Text = i.ToString
Next

mc_laren
دوشنبه 22 فروردین 1390, 15:14 عصر
برای رفع مشکل مقدار دهی هم باید از یک حلقه تو در تو استفاده کنی
یکی برای تعداد رکورد ها و دیگری برای تعداد فیلدها

shadi khanum
دوشنبه 22 فروردین 1390, 19:00 عصر
دوست عزیز بازم همون ارور قبلی رو داد...دقیقا کد شمارو هم نوشتم

ببینید کلا اگه نگاه کنید دستور غلطه....
بیاین بصورت دستی این دستور رو debug کنیم.....
row که نمایانگر سطره و item هم نمایانگر فیلد

در بار اول i=0.....
در سمت چپ:
اولین label مساوی است با label0....
در سمت راست:
اگه rows(i).item(0) داشته باشیم میره به سطر اول که اندیسش 0 هست...item(0) هم که id هست و مقدارش وارد label0 میشه

اما نکته اینجاست که بار دوم که i=1
در سمت چپ:
اولین label مساوی است با label1....
در سمت راست:
میشه row(1) یعنی سطر دوم و باز هم فیلد ID وارد label میشه

اینا همه در صورتی هست که دستور select من فقط شامل ID نیست

واقعا دیگه نمیدونم چکار کنم....:گریه:
اگه میشه خودتون امتحان کنین ببینین واقعا اصلا میشه با حلقه for مقادیر رو از دیتابیس به label انتقال داد....این ارور مانع بزرگی شده واسم :ناراحت:
هر کاری راه حلی داره و کار نشد نداره :) این سوال هم مشکل بزرگی نیست، منتها شما سوالت رو درست مطرح نکردی که اولا اسامی labelهات چه جوریه؟ تو دیتاتیبلت چی داری؟ و اینکه از اون اطلاعات چه جوری میخوای واسه label هات text بذاری؟ یعنی میخوای مقادیر ستون های یک row توی ldbelها نشون داده بشه یا یک فیلد از چند row؟ سوالت رو کامل توضح بده که چی داری و چیکار میخوای بکنی، حتما حل میشه

mohsencom
دوشنبه 22 فروردین 1390, 19:53 عصر
هر کاری راه حلی داره و کار نشد نداره :) این سوال هم مشکل بزرگی نیست، منتها شما سوالت رو درست مطرح نکردی که اولا اسامی labelهات چه جوریه؟ تو دیتاتیبلت چی داری؟ و اینکه از اون اطلاعات چه جوری میخوای واسه label هات text بذاری؟ یعنی میخوای مقادیر ستون های یک row توی ldbelها نشون داده بشه یا یک فیلد از چند row؟ سوالت رو کامل توضح بده که چی داری و چیکار میخوای بکنی، حتما حل میشه

ممنون از راهنماییتون :لبخندساده:
ببینید من یه دیتابیس access دارم...و همه فیلدهارو واسه این کار لازم ندارم...با دستور select بعضی از فیلدهارو برای این کار انتخاب میکنم....البته کاری که میخوام انجام پیچیده تر از ایناست و نمیخوام بحث رو پیچیده تر کنم...من فقط میخوام الان بدونم چطوری مقادبر فیلدهایی که select میکنمو تو label نشون بدم....

با توجه به اینکه در حلقه for مقدار i از صفر شروع میشه..
جواب سوال اولتون : اولین label من هست Label0..و الی آخر که فرض بگیریم label آخر هست Label100

جواب سوال دومتون : در کدی که خواهم گذاشت میتونید مشاهد کنید

جواب سوال سومتون :میخوام مقادیر ستون های یک row توی label ها نشون داده بشه

ممنون از اینکه به مشکلم رسیدگی میکنید،واقعا ممنونم :خجالت:

Dim mypassword As String = ""
Dim connetionString As String
Dim connection As OleDbConnection
Dim oledbAdapter As New OleDbDataAdapter
Dim ds As New DataSet

connetionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\mydb.mdb;Jet OLEDB:Database Password=" & mypassword
connection = New OleDbConnection(connetionString)

connection.Open()
oledbAdapter.SelectCommand = New OleDbCommand("SELECT ID,Noekala,NameKarkhaneh,NameKala,Mojudi FROM anbar", connection)
oledbAdapter.Fill(ds)
oledbAdapter.Dispose()
connection.Close()
Dim i As Integer


For i = 0 To ds.Tabels(0).Row.Count - 1
Me.Controls("Label" + i.ToString).Text = ds.Tables(0).Rows(i).Item(0)
Next

shadi khanum
دوشنبه 22 فروردین 1390, 20:18 عصر
میخوام مقادیر ستون های یک row توی label ها نشون داده بشه
پس فقط با rows(0) از دیتاتیبل کار دارین و باید تعداد labelها برابر با تعداد فیلدهاتون باشه که یعنی اینجا چون 5 تا فیلد رو تو Select نوشتین پس 5 تا label دارین از label0 تا label4. پس به جای
For i = 0 To ds.Tabels(0).Row.Count - 1
Me.Controls("Label" + i.ToString).Text = ds.Tables(0).Rows(i).Item(0)
Next
باید بنویسید

For i As Integer = 0 To ds.Tables(0).Columns.Count - 1
Me.Controls("Label" + i.ToString).Text = ds.Tables(0).Rows(0).Item(i)
Next
موفق باشی

sajjad etemadfar
دوشنبه 22 فروردین 1390, 20:22 عصر
ممنون از حمایتتون تو تاپیکم

mohsencom
دوشنبه 22 فروردین 1390, 21:41 عصر
پس فقط با rows(0) از دیتاتیبل کار دارین و باید تعداد labelها برابر با تعداد فیلدهاتون باشه که یعنی اینجا چون 5 تا فیلد رو تو Select نوشتین پس 5 تا label دارین از label0 تا label4. پس به جای
For i = 0 To ds.Tabels(0).Row.Count - 1
Me.Controls("Label" + i.ToString).Text = ds.Tables(0).Rows(i).Item(0)
Next
باید بنویسید

For i As Integer = 0 To ds.Tables(0).Columns.Count - 1
Me.Controls("Label" + i.ToString).Text = ds.Tables(0).Rows(0).Item(i)
Next
موفق باشی

دوست عزیز ممنونم ولی ظاهرا هیچ کدوم از این کدها کار نکرد و یا یه تست ساده میشه فهمید کلا این کدی که از اول گذاشته شده غلطه...به نظرم این روشی که برای مقداردهی label گفته شده غلطه...

اگه فرضا به جای i در کد زیر بنویسیم مثلا 1....(بدون در نظر گرفتن دیتابیس) باید خیلی راحت مقدار رشته ای "MyItem" رو در label1 قرار بده...اما همون اروری که گفتمو باز میده....مشکل تنها و تنها همین کده :

میتونین خودتون امتحان کنین :
Me.Controls("Label" + 1.ToString).Text = "MyItem"

armin8651
دوشنبه 22 فروردین 1390, 22:18 عصر
از یک نظر دیگه بهتره به این مشکل نگاه کنی ، به نظرت اصلآ Label برای این کار مناسب هستش؟!!!
هر ابزاری یک کاربرد خاصی داره و همه جا قابل استفاده نیست

mohsencom
دوشنبه 22 فروردین 1390, 22:26 عصر
از یک نظر دیگه بهتره به این مشکل نگاه کنی ، به نظرت اصلآ Label برای این کار مناسب هستش؟!!!
هر ابزاری یک کاربرد خاصی داره و همه جا قابل استفاده نیست

آرمین جان من دارم یه کاتولوگ میسازم...باید از label استفاده کنم خب...نمیتونم تو textbox یا چیز دیگه بذارم...چون ظاهر کارو خراب میکنه....آخه مگه میشه همچین کاری رو نشه با label کرد

shadi khanum
دوشنبه 22 فروردین 1390, 22:45 عصر
اگه فرضا به جای i در کد زیر بنویسیم مثلا 1....(بدون در نظر گرفتن دیتابیس) باید خیلی راحت مقدار رشته ای "MyItem" رو در label1 قرار بده...اما همون اروری که گفتمو باز میده....مشکل تنها و تنها همین کده :
دوست عزیز متاسفانه یا خوشبختانه این کد دقیقا کار میکنه و Error نمیده! شما احتمالا مشکلت چیز دیگه است!
این Sample رو ببین، متوجه میشی خودت

mohsencom
دوشنبه 22 فروردین 1390, 23:04 عصر
دوست عزیز متاسفانه یا خوشبختانه این کد دقیقا کار میکنه و Error نمیده! شما احتمالا مشکلت چیز دیگه است!
این Sample رو ببین، متوجه میشی خودت


ممنون دوست عزیز ..خیال منو از بابت این کد راحت کردید...

بالاخره فهمیدم مشکلم کجاست..اووووففففففففففف

من label رو داخل panel گذاشتم...ظاهرا باید در اون کد panel من که panel1 هست هم فراخوانی بشه

با این اوصاف کدش به چه صورت درمیاد؟
بخدا خجالت میکشم اینقدر سوال میپرسم....panel های من زیاده و فکر کنم واسه اونا هم باید حلقه FOR بذارم....ای خدا :افسرده:

mohsencom
دوشنبه 22 فروردین 1390, 23:23 عصر
دوست عزیز فهمیدم چطوری panel رو باهاش فراخوانی کنم...فقط الان نمیدونم چطوری واسه panel ها هم حلقه for تعیین کنم

Me.Panel1.Controls("Label" + i.ToString).Text = "MyItem"

shadi khanum
دوشنبه 22 فروردین 1390, 23:42 عصر
واسه اون هم راه داره. این Sample رو ببین. دو خالت واسش نوشتم که اگه کدش رو نگاه کنی متوجه میشی. اگه اسم panelها مرتبه یعنی panel1,panel2,... از روش اول استفاده کن و دومی رو comment کن چون سریع تر ولی اگه اسم panelهات مرتب نیست ، مثلا mypanel , pnl1, pnlproduct , ... از روش دوم استفاده کن
موفق باشی

mohsencom
دوشنبه 22 فروردین 1390, 23:43 عصر
شادی جان خیلی خیلی ازت ممنونم...خانومی کردی :لبخندساده:
مشکلم بالاخره حل شد....دستت درد نکنهههههههههههه...الهی به هرچی میخوای برسیییییییییییییییییییییی ییی :لبخندساده: