2016-06-17 4 views
0

можно заполнить таблицу Gridview с помощью функции C#? Обычно для Gridview я вижу DataSource и SqlDataSource с запросами после получения данных.заполнить Gridview с помощью C#

У меня уже есть List объектов с полями, которые должны заполнять мой стол. Каждый объект имеет 9 строковых полей, и каждый из них должен быть привязан к столбцу. Каждый объект в списке по существу представляет строку в таблице. Будет ли код в файле C# быть чем-то вроде этого?

for (int i = 0; i < credentials.Count; i++) 
{ 
    for (int j = 0; j < 10; j++) 
    { 
     row1["ID"] = credentials[i].Id.ToString(); 
     row1["Windows ID"] = credentials[i].WindowsId; 
     row1["First Name"] = credentials[i].FirstName.ToString(); 
     row1["Last Name"] = credentials[i].LastName.ToString(); 
     ... 

     dt.Rows.Add(row1); 
    } 


} 
gridRoles.DataSource = dt; 
gridRoles.DataBind(); 
+0

Да, похоже, что он должен работать. Я заполнял gridviews, когда они летают много раз. – causita

+0

Я не уверен в asp.net, но обычно я устанавливаю свой «источник» в список объектов, и я пишу в своем xaml конкретное поле fieldName, которое я хотел бы показать в каждом столбце (FieldName - это переменная-член моей object: Name, ID, Whatever, .. и т. д.) –

ответ

0

Да, что вы делаете, похоже, что он должен работать, хотя я не уверен, что вы используете j, поскольку он не используется в вашем приведенном выше коде.То, как я заселена в DataGridView в прошлом программно является создание DataTable объекта:

DataTable dt = new DataTable(); 

определения ее столбцов:

dt.Columns.Add(columnName);` 

создания DataRow S:

DataRow row = dt.NewRow(); 
//fill row 
row[columnName or index] = value; //repeat for needed values, could use a for loop and go through indexes 

добавляющие DataRow до DataTable:

dt.Rows.Add(row); 
dt.Rows.InsertAt(row, index); //if you want a specific position 

и, наконец, установить DataGridView «s DataSource как DataTable, как вы были:

dgv.DataSource = dt; 

Примечание: если вы не имеют DataGridView» s столбцов определяется так же, как и DataRow с потом все будет работать неправильно.

0

Если у вас уже есть список объектов, вы можете просто установить его в качестве источника данных для GridView, нет необходимости конвертировать или создать новый DataTable.

gridRoles.DataSource = credentials; 
+0

У меня есть список, но список генерируется по-разному каждый раз из-за алгоритмов поиска. Смогу ли я это сделать? – mysticalstick

+0

Я предполагаю, что это список объектов пользовательского класса, если это так, не должно быть никаких проблем, GridView будет отображать свойства каждого объекта в вашем классе в качестве столбцов, и каждый объект будет строкой. Однако, если вы говорите, что генерируется по-разному, то список состоит из разных типов, которые вам нужно будет проверить заранее, или вы можете создать модель, которая учитывает различные возможности. – ArturoAP

0

Редактировать: Другие люди говорят, что ваши данные должны быть источником на экране сетки. Я считаю, что это будет работать и будет намного быстрее. Мое решение будет работать для создания новых данных с итерацией (например, вы хотите, чтобы идентификатор соответствовал месту в gridview.) Однако может быть полезно создать новую модель для вашего элемента списка и создать некоторые геттеры ради модульный ООП.


В этом случае я бы создал новую модель для элемента gridview (в данном случае это выглядит как пользователи). Так что я сделал что-то подобное в UWP, и это закончилось тем, что выглядели так:

 ButtonRow = new List<ButtonModel>(); 
     int daysOnButtonRow = 365; 
     TimeSpan additionalDay = new System.TimeSpan(1); 
     for (int i = 0; i < daysOnButtonRow; i++) 
     { 
      ButtonRow.Add(new ButtonModel(DaysFromToday(i), DaysFromToday(i + 1))); 
     } 

Тогда класс ButtonModel содержал параметры, специфичные для каждой кнопки и методы получения релевантной информации, которую я хотел, чтобы отобразить на этой кнопке.

public class ButtonModel 
{ 
    public DateTime StartDate { get; set; } 
    public DateTime EndDate { get; set; } 

    public ButtonModel(DateTime _startDate, DateTime _endDate) 
    { 
     StartDate = _startDate; 
     EndDate = _endDate; 
    } 

    public string StartDateTruncatedName 
    { 
     get { return StartDate.ToString("dddd").Substring(0, 3).ToUpper(); } 
    } 

    public string StartDateDayNum 
    { 
     get { return StartDate.Day.ToString(); } 
    } 

    public string StartDateMonth 
    { 
     get { return StartDate.ToString("MMMM").ToUpper(); } 
    } 
} 

Это может быть намного более чистым и более модульным. Пример в списке, но он должен работать аналогично для gridview. Поскольку вы уже работаете с заполненным списком, я бы предложил использовать цикл for-in, а также для вашей итерации вместо стандартного цикла for. Это сделало бы так, что каждый раз, когда вы добавляете элемент в список, он будет добавлен в gridview.

Надеюсь, это поможет! :)

0

Почему вы не используете объект ObjectDataSource? Укажите класс и метод в свойствах объекта ObjectDatasource, и вы все настроены. Свяжите объект ObjectDatasource с сеткой.

Смежные вопросы