У меня есть форма Windows, в которую я помещаю панель макета потока. У меня также есть класс, который читает локальную базу данных и возвращает соответствующие значения. В зависимости от пользовательского ввода через кнопку (и) панель заполняется другими кнопками. Количество этих кнопок зависит от значений в локальной базе данных. Кнопки отображаются правильно и с правильной информацией, но порядок, в котором они отображаются, является алфавитным, хотя таблица данных из класса базы данных упорядочена в правильном порядке (через числовое значение столбца «ID») из базы данных).
Я также добавил представление сетки данных, чтобы проверить, и там элементы отображаются правильно. Я попытался добавить для каждого l oop, но это, кажется, просто случайным образом определяет порядок кнопок.
Кто-нибудь знает, как я могу получить правильное отображение кнопок, чтобы сначала отображается кнопка с наименьшим значением «ID».
Вот код для отображения кнопок:
//set the datagridview with the correct values/names. Order works perfectly
dataGridView_AttackName.DataSource = db.attackIDName(attackCategory, taughtOn);
DataTable dt = db.attackIDName(attackCategory, taughtOn);
//sort datable again because doesnt work from db class
dt.DefaultView.Sort = "ID";
dt.DefaultView.ToTable();
int horizontal = 0;
int vertical = 0;
Button[] buttonArray = new Button[dt.Rows.Count];
for (int items = 0; items < buttonArray.Length; items++)
{
buttonArray[items] = new Button();
buttonArray[items].Size = new Size(150, 50);
buttonArray[items].Location = new Point(horizontal, vertical);
buttonArray[items].Name = string.Format("Button_{0}", dt.Rows[items]["ID"].ToString());
buttonArray[items].Text = dt.Rows[items]["Name"].ToString();
buttonArray[items].Click += btn_msg;
if ((items + 1) < buttonArray.Length)
{
vertical += 50;
}
flowLayoutPanel_AttackName.Controls.Add(buttonArray[items]);
}
//get the correct ID value from the button name and try to order it that way
foreach (Button b in flowLayoutPanel_AttackName.Controls)
{
string name = b.Name;
string subname = name.Substring(name.IndexOf("_") + 1);
int i = Convert.ToInt32(subname);
flowLayoutPanel_AttackName.Controls.SetChildIndex(b, i);
}
Я искал на этом сайте, но ничего не смог найти это сработало.