#c# #list #gridview #dynamic #datarow
#c# #Список #просмотр сетки #динамический #datarow
Вопрос:
Я хочу иметь общий метод для достижения следующего:
У меня есть ‘n’ Lists
of string
, и я хочу, чтобы они отображались как строки a Data Table
в соответствующих столбцах.
Может быть, приведенный ниже код прояснит мой вопрос:
List<string> list1 = new List<string>();
List<string> list2 = new List<string>();
List<string> list3 = new List<string>();
for (int num1 = 0; num1 < 4; num1 )
{
list1.Add(num1.ToString());
}
for (int num2 = 4; num2 < 8; num2 )
{
list2.Add(num2.ToString());
}
for (int num3 = 8; num3 < 12; num3 )
{
list3.Add(num3.ToString());
}
DataTable dtTable = new DataTable();
dtTable.Columns.Add("Column1", typeof(string));
dtTable.Columns.Add("Column2", typeof(string));
dtTable.Columns.Add("Column3", typeof(string));
for (int num4 = 0; num4 < list1.Count; num4 )
{
dtTable.Rows.Add(list1[num4], list2[num4], list3[num4]);
}
GridView2.DataSource = dtTable;
GridView2.DataBind();
В приведенном выше коде элементы под list1
, list2
, list3
представлены в виде строк под столбцами Column1
, Column2
, Column3
соответственно, как:
Column1 Column2 Column3
0 4 8
1 5 9
2 6 10
3 7 11
У меня есть требование иметь около 50 списков, отображать их в 50 разных столбцах, в конечном итоге привязывая их к a GridView
.
Я не могу просто продолжать добавлять списки в виде строк вручную, т. Е.
dtTable.Rows.Add(list1[num4], list2[num4], list3[num4], list4[num4],.......,listn[num4]);
Как обобщить вышесказанное, чтобы включить n списков?
Эксперты, пожалуйста, помогите здесь.
Комментарии:
1. Глядя на то, что вы делаете, у меня такое чувство, что вам не следует расширять свои данные в виде столбцов. Базы данных работают лучше, когда данные находятся в строках. Возможно, вы захотите рассмотреть возможность наличия двух таблиц данных. Например: если вы хотите хранить телефонные номера людей и не хотите ограничивать количество телефонных номеров для хранения. Вместо того, чтобы иметь имена столбцов, такие как Phone # 1, Phone # 2, Phone # 3 … и т.д. Вы используете две таблицы, в одной таблице будет столбец ID #, который ссылается на второй столбец таблицы с именем ID #, после чего ваши данные будут помещены в строки. Затем вы можете расти столько, сколько хотите по строкам.
2. @Pabinator У меня нет преимущества использования баз данных здесь, я имею в виду, что я не могу использовать базы данных. Любые другие предложения?
3. Ну, я имел в виду таблицы данных как базы данных. Другими словами, вам не нужно использовать базу данных. В моем примере у вас может быть таблица данных с этими столбцами: ИДЕНТИФИКАТОР, имя пользователя. Затем вторая таблица данных с этими столбцами: ИДЕНТИФИКАТОР, PersonPhoneNumber. Тогда ваши данные в первой таблице данных будут выглядеть так: Row1 = 1, Пабло; Row2 = 2, Хосе; и т.д., а для второй таблицы данных ваши данные будут выглядеть так: Row1 = 1, (555) 123-4567; Row2 = 1, (555) 123-1234. В этом случае вы знаете, что телефонные номера (555) 123-4567 и (555) 123-1234 — это телефонные номера Пабло. И вы можете расти столько, сколько захотите.
4. Каковы требования к именам столбцов? Могут ли они быть просто пронумерованы вплоть до 50, как у вас в вашем примере? Должна ли таблица иметь несколько строк?
5. @MikeHixson Хороший улов.. Ну, я думаю, я могу управлять именами столбцов как Column1, Column2…. Столбец 50. Если бы должны были быть разные имена столбцов, как можно было бы подойти к этому? Любая идея.
Ответ №1:
Вы можете попробовать это. Создайте метод для обработки всех списков
private void PopulateGrid(params List<string>[] list)
{
DataTable dtTable = new DataTable();
for (int listIndex = 0; listIndex < list.Length; listIndex )
{
dtTable.Columns.Add(string.Format("Column{0}", listIndex), typeof(string));
}
for (int rowIndex = 0; rowIndex < list[0].Count; rowIndex )
{
DataRow dr = dtTable.NewRow();
for (int listIndex = 0; listIndex < list.Length; listIndex )
{
dr[listIndex] = list[listIndex][rowIndex];
}
dtTable.Rows.Add(dr);
}
dataGridView1.DataSource = dtTable;
}
Затем создайте main List
, чтобы вы могли добавлять столько списков, сколько пожелаете
List<List<string>> allLists = new List<List<string>>();
/* Code to populate the lists */
allLists.Add(list1);
allLists.Add(list2);
allLists.Add(list3);
...
allLists.Add(listn);
Затем вызовите метод
PopulateGrid(allLists.ToArray());
Комментарии:
1. ваш подход выглядит аккуратно. Позвольте мне попробовать
2. Это сработало, приятель. Спасибо за это. Если мне нужны разные имена столбцов, то какой процедуре я должен следовать.
3. Хорошо… вы можете попробовать изменить main
List
на aDictionary<string, List<string>>
и взять вkey
качестве имени столбца.