PDA

View Full Version : سوال: یه روش ساده تر برای پر کردن دیتاسورس 40 تا ComboBox



SardareEshgh
شنبه 21 مهر 1397, 18:52 عصر
دوستان سلام
توی یه فرمی 40 تا کمبوباکس دارم (مربوط به رژیم غذایی یک بخش هستش) که اطلاعات کمبوباکسها یکسان هستش.
موقع لود فرم اونها رو با حلقه پر میکنم. اما انگار لود فرم کمی طول میکشه. راه ساده تری برای اینکار وجود داره؟
ممنون

alexmcse
شنبه 21 مهر 1397, 19:56 عصر
به این صورت

private int[] n = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
private void Form1_Load(object sender, EventArgs e)
{
comboBox1.DataSource = comboBox2.DataSource = comboBox3.DataSource = comboBox4.DataSource = comboBox5.DataSource = comboBox6.DataSource = comboBox7.DataSource = comboBox8.DataSource = comboBox9.DataSource = comboBox10.DataSource = n;
}
اگر هزارتا هم کمبو باکس باشه همین جور مقدار دهی میکنند

SardareEshgh
شنبه 21 مهر 1397, 21:14 عصر
به این صورت

private int[] n = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
private void Form1_Load(object sender, EventArgs e)
{
comboBox1.DataSource = comboBox2.DataSource = comboBox3.DataSource = comboBox4.DataSource = comboBox5.DataSource = comboBox6.DataSource = comboBox7.DataSource = comboBox8.DataSource = comboBox9.DataSource = comboBox10.DataSource = n;
}
اگر هزارتا هم کمبو باکس باشه همین جور مقدار دهی میکنند

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


DataTable RejimTbl = new DataTable();
con.SelectRejim_().Fill(RejimTbl);//متد فراخوانی رژیمها که بصورت دیتاآداپتور دریافت و در دیتاتیبل ریخته میشود

string[] Rejimes = new string[RejimTbl.Rows.Count];

int tt = 0;

foreach (DataRow item in RejimTbl.Rows)
{
Rejimes[tt] = item[2].ToString().Trim();

tt++;
}

Rejim1.DataSource = Rejim2.DataSource = Rejim3.DataSource = Rejim4.DataSource = Rejim5.DataSource = Rejim6.DataSource = Rejim7.DataSource =
Rejim8.DataSource = Rejim13.DataSource = Rejim18.DataSource = Rejim23.DataSource = Rejim28.DataSource = Rejim33.DataSource = Rejim37.DataSource =
Rejim9.DataSource = Rejim14.DataSource = Rejim19.DataSource = Rejim24.DataSource = Rejim29.DataSource = Rejim34.DataSource = Rejim38.DataSource =
Rejim10.DataSource = Rejim15.DataSource = Rejim20.DataSource = Rejim25.DataSource = Rejim30.DataSource = Rejim35.DataSource = Rejim39.DataSource =
Rejim11.DataSource = Rejim16.DataSource = Rejim21.DataSource = Rejim26.DataSource = Rejim31.DataSource = Rejim36.DataSource = Rejim40.DataSource =
Rejim12.DataSource = Rejim17.DataSource = Rejim22.DataSource = Rejim27.DataSource = Rejim32.DataSource = Rejimes;

Mahmoud.Afrad
شنبه 21 مهر 1397, 21:44 عصر
دوستان سلام
توی یه فرمی 40 تا کمبوباکس دارم (مربوط به رژیم غذایی یک بخش هستش) که اطلاعات کمبوباکسها یکسان هستش.
موقع لود فرم اونها رو با حلقه پر میکنم. اما انگار لود فرم کمی طول میکشه. راه ساده تری برای اینکار وجود داره؟
ممنون

کد لودفرم را قرار بدید.

SardareEshgh
یک شنبه 22 مهر 1397, 04:46 صبح
کد لودفرم را قرار بدید.

در این حالت لود فرم کمی طول میکشه.(حدود 4تا5 ثانیه). شایدم من زیادی حساسم!:متفکر:

private void Form1_Load(object sender, EventArgs e)
{
timer1.Enabled = true;
///////todey
DateMetod();


// btnSave.Enabled = false;

frm1Connection con = new frm1Connection();
UserId = 772633;
int dastrasi = con.Dastrasi(UserId);//سطح دسترسی کاربر

lblBakhshName.Text = con.SelectbakhshName(UserId);//کاربر در کدام بخش قرار دارد

DataTable Rejim = con.SelectRejim_();////فراخوانی رژیمهای غذایی که حداکثر 10 مورد می باشد

for (int ww = 1; ww <= 40; ww++)

foreach (DataRow item in Rejim.Rows)

((ComboBox)this.Controls["Rejim" + ww]).Items.Add(item[2].ToString().Trim());//پر کردن کمبوها



}

alexmcse
یک شنبه 22 مهر 1397, 11:20 صبح
برای هر مقداری که میخوای به کمبو باکس بدی یک متغییر تعریف کنید
دیگر کمبو باکس ها با هم تغییر نمیکند
private int[] n1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
private int[] n2 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
private int[] n3 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
private int[] n4 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
private int[] n5 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
private int[] n6 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
private int[] n7 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
private int[] n8 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
private int[] n9 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
private int[] n10 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
private void Form1_Load(object sender, EventArgs e)
{
comboBox1.DataSource = n1;
comboBox2.DataSource = n2;
comboBox3.DataSource = n3;
comboBox4.DataSource = n4;
comboBox5.DataSource = n5;
comboBox6.DataSource = n6;
comboBox7.DataSource = n7;
comboBox8.DataSource = n8;
comboBox9.DataSource = n9;
comboBox10.DataSource = n10;
}

vB.N3T
یک شنبه 22 مهر 1397, 14:03 عصر
من با این روش پر میکنم مشکل سرعت ندارم


foreach (,,) {
Cmb_Dehestan.SelectedValuePath = "Key";
Cmb_Dehestan.DisplayMemberPath = "Value";
Cmb_Dehestan.Items.Add(new KeyValuePair<int, string>(Convert.ToInt16(item.ID_Dehestan), item.Dehestan_Name.ToString()));
}

foreach رو بر اساس برنامت تغیر بده

Mahmoud.Afrad
یک شنبه 22 مهر 1397, 17:19 عصر
در این حالت لود فرم کمی طول میکشه.(حدود 4تا5 ثانیه). شایدم من زیادی حساسم!:متفکر:

private void Form1_Load(object sender, EventArgs e)
{
timer1.Enabled = true;
///////todey
DateMetod();


// btnSave.Enabled = false;

frm1Connection con = new frm1Connection();
UserId = 772633;
int dastrasi = con.Dastrasi(UserId);//سطح دسترسی کاربر

lblBakhshName.Text = con.SelectbakhshName(UserId);//کاربر در کدام بخش قرار دارد

DataTable Rejim = con.SelectRejim_();////فراخوانی رژیمهای غذایی که حداکثر 10 مورد می باشد

for (int ww = 1; ww <= 40; ww++)

foreach (DataRow item in Rejim.Rows)

((ComboBox)this.Controls["Rejim" + ww]).Items.Add(item[2].ToString().Trim());//پر کردن کمبوها



}

حلقه را به صورت زیر بنویسید
for (int ww = 1; ww <= 40; ww++)
{
ComboBox cb = Controls["Rejim" + ww] as ComboBox;
cb.DataSource = Rejim.AsDataView();
cb.DisplayMember = "ColumnNameToDisplay";
cb.ValueMember = "PrimaryKeyName";
}
به جای ColumnNameToDisplay نام ستونی که بایست نمایش داده بشه و PrimaryKeyName هم نام ستون کلید رو قرار بدید.

محمد آشتیانی
یک شنبه 22 مهر 1397, 18:22 عصر
سلام
یک متد بنویسید به این شرح
private int[] myArray = {1, 2, 3, 4, 5, 6, 7, 8, 9};



private void FillComboBoxes(Control hostControl)
{
foreach (var control in hostControl.Controls.OfType<ComboBox>())
{
control.DataSource = myArray.ToArray();
}
}


در رویداد فرم لود به این صورت فراخوانی بفرمائید
FillComboBoxes(this);

اگر هم خیلی زمان بر هست ، می تونید به صورت Async دیتا رو لود کنید.