دوستان سلام
توی یه فرمی 40 تا کمبوباکس دارم (مربوط به رژیم غذایی یک بخش هستش) که اطلاعات کمبوباکسها یکسان هستش.
موقع لود فرم اونها رو با حلقه پر میکنم. اما انگار لود فرم کمی طول میکشه. راه ساده تری برای اینکار وجود داره؟
ممنون
دوستان سلام
توی یه فرمی 40 تا کمبوباکس دارم (مربوط به رژیم غذایی یک بخش هستش) که اطلاعات کمبوباکسها یکسان هستش.
موقع لود فرم اونها رو با حلقه پر میکنم. اما انگار لود فرم کمی طول میکشه. راه ساده تری برای اینکار وجود داره؟
ممنون
به این صورت
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;
آخرین ویرایش به وسیله SardareEshgh : شنبه 21 مهر 1397 در 21:34 عصر
در این حالت لود فرم کمی طول میکشه.(حدود 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());//پر کردن کمبوها
}
آخرین ویرایش به وسیله SardareEshgh : یک شنبه 22 مهر 1397 در 05:16 صبح
برای هر مقداری که میخوای به کمبو باکس بدی یک متغییر تعریف کنید
دیگر کمبو باکس ها با هم تغییر نمیکند
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;
}
من با این روش پر میکنم مشکل سرعت ندارم
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 رو بر اساس برنامت تغیر بده
حلقه را به صورت زیر بنویسید
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 هم نام ستون کلید رو قرار بدید.
آخرین ویرایش به وسیله Mahmoud.Afrad : یک شنبه 22 مهر 1397 در 18:31 عصر
سلام
یک متد بنویسید به این شرح
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 دیتا رو لود کنید.
قوانین سایت برنامه نویس [ به سوالات از طریق پیام خصوصی پاسخ داده نمی شود ]