C# .NET - Загрузка информации из базы данных SQL в массив кнопок, которые расположены не по порядкуC#

Место общения программистов C#
Ответить
Anonymous
 C# .NET - Загрузка информации из базы данных SQL в массив кнопок, которые расположены не по порядку

Сообщение Anonymous »

Я пишу приложение для точек продаж (POS), в котором у меня есть номер макета (1–35), текст (цена и название продукта) и изображение кнопок в базе данных SQL. В базе данных есть таблица ItemLayout, которая включает в себя идентификатор элемента (PLU), номер макета (1-35), если кнопка должна быть видна в первую очередь (все работает) и группу элемента. Они читаются с помощью следующей функции:

Код: Выделить всё

public ILMButtonsProps[] getILMButtonProps(string GroupName)
{
ILMButtonsProps[] result = new ILMButtonsProps[getILMAmount(GroupName)];
try
{
SqlConnection con = new SqlConnection(returnConString());
con.Open();

string operation = "SELECT * FROM ItemLayout WHERE ItemGroup=@ItemGroup";
SqlCommand cmd = new SqlCommand(operation, con);
cmd.Parameters.AddWithValue("@ItemGroup", GroupName);
SqlDataReader reader = cmd.ExecuteReader();

int count = 0;
while (reader.Read())
{
result[count] = new ILMButtonsProps();
result[count].ItemGroup = reader["ItemGroup"].ToString();
result[count].LayoutNumber = reader["Number"].ToString();
result[count].Enable = Convert.ToInt32(reader["Enable"].ToString());
result[count].PLU = reader["PLU"].ToString();

count++;
}
reader.Close();
con.Close();

}
catch (Exception ex)
{
helperClass.throwError(ex.Message, ex.Source);
}
return result;
}
Функция, используемая для получения длины массива:

Код: Выделить всё

public int getILMAmount(string GroupName)
{
int result = 0;
try
{
SqlConnection con = new SqlConnection(returnConString());
con.Open();

string operation = "SELECT * FROM ItemLayout WHERE ItemGroup=@GroupName";
SqlCommand cmd = new SqlCommand(operation, con);
cmd.Parameters.AddWithValue("@GroupName", GroupName);
SqlDataReader reader = cmd.ExecuteReader();

while (reader.Read())
{
result++;
}
reader.Close();
con.Close();

}
catch (Exception ex)
{
helperClass.throwError(ex.Message, ex.Source);
}
return result;
}
И используемый класс (не думаю, что это здесь очень важно, но все равно:)

Код: Выделить всё

internal class  ILMButtonsProps
{
internal string ItemGroup;
internal string LayoutNumber;
internal int Enable;
internal string PLU;
}
Вот также таблица в дизайнере таблиц:
[img]https://i.sstatic.net /JERqQy2C.png[/img]

Когда я вызываю функцию getILMButtonProps, используя следующий фрагмент кода, я получаю все результаты в странной схеме.

Код: Выделить всё

//Load buttons
ILMButtonsProps[] array = SQL.getILMButtonProps(cmbILMGroups.SelectedItem.ToString());
int counter = 0;
int max = array.Length;
Button[] btns = panel4.Controls.OfType().ToArray();

if (array == null)
{
helperClass.throwError("There was an error reading the arrangements for the buttons in the database! Please try again...", "NPManager");
return;
}

for (int x = 0; x < max; x++)
{
//If all props are set, exit loop
if (counter == max || counter == 35) { break; }

//If there is a null in the layout, skip it.
if (array[counter] == null)
{
counter++;
return;
}

//Enable t/f
//Get details from DB and input to buttons
int i = Convert.ToInt32(array[counter].LayoutNumber);
if (array[counter].Enable == 1)
{

btns[i].Text = "";
btns[i].BackgroundImage = NPManager.Properties.Resources._109_AllAnnotations_Error_24x24_72;
}

if (array[counter].Enable == 2)
{
ILMDataPoints dp = SQL.getDataRowFromPLU(array[counter].PLU);

btns[i].Text = dp.itemName + " @ " + dp.itemPrice;
if(dp.image == null)
{
btns[i].BackgroundImage = null;
btns[i].ForeColor = Color.Black;
}
if (dp.image != null && string.IsNullOrEmpty(dp.image.ToString()) && dp.image == System.DBNull.Value && dp.image.ToString() == "{}")
{
btns[i].BackgroundImage = GetImageFromByteArray((byte[])dp.image);

PictureAnalysis pictureAnalysis = new PictureAnalysis();
btns[i].ForeColor = GetReadableForeColor(pictureAnalysis.GetMostUsedColor(GetImageFromByteArray((byte[])dp.image)));  //N
}
}

counter++;
}
Переменная ILMDatapoints (dp) является пользовательским классом
Вот результат:
Изображение

Как видите, расположение кнопок чередуется сверху и снизу. , но я хочу, чтобы это было слева направо. Я не понимаю, как это возможно, поскольку я использую несколько способов, чтобы убедиться, что кнопки и свойства находятся в правильном порядке (числовом порядке).
Если кто-нибудь может помочь, это было бы здорово.
Спасибо,
ЭБ.

Подробнее здесь: https://stackoverflow.com/questions/790 ... ns-the-are
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»