Создать таблицу DataGridView без источника?
Мне никогда не удавалось заставить DataGridView работать так, как мне нужно, но я вернулся к этому снова и надеюсь, что смогу разобраться с этим. В настоящее время у меня есть класс, в котором я храню много данных о каждом отдельном билете поддержки, который входит в наше программное обеспечение, но я хочу отображать только некоторые из этих данных в DataGridView.
Класс выглядит следующим образом...
public class Ticket
{
public string ID { get; set; }
public string TicketID { get; set; }
public string DeptID { get; set; }
public string UserID { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public string CC { get; set; }
public string Subject { get; set; }
public string Message { get; set; }
public string Status { get; set; }
public string Priority { get; set; }
public DateTime Date { get; set; }
public DateTime LastResponse { get; set; }
public IPAddress IP { get; set; }
}
Я хочу создать таблицу, которая показывает имя / сообщение / приоритет или некоторую комбинацию этих значений, но определенно не все из них. Есть ли способ, с помощью которого я могу просто создать данные таблицы с нуля, вместо того, чтобы указывать источник данных?
Вот мой тестовый код, реализующий предложенное ниже предложение, но я получаю "Невозможно добавить строку в элемент управления DataGridView, в котором нет столбцов".
WHMCS x = new WHMCS();
List<WHMCS.Ticket> Tickets = new List<WHMCS.Ticket>();
Tickets = x.Get_Tickets();
KryptonDataGridView dgv = new KryptonDataGridView();
content1.Controls.Add(dgv);
foreach (var tix in Tickets)
{
var objArr = new object[] {tix.Priority, tix.Subject};
dgv.Rows.Add(objArr);
}
2 ответа
Вы можете добавить строки вручную, преобразовав свой класс Ticket в массив объектов, используя интересующие вас поля, а затем добавив массив в dataGrid. Что-то вроде
foreach(var ticket in AllTickets){
var objArr = new object[]{ticket.Id, ticket.DeptId...};
dataGrid.Rows.Add(objArr);
}
Убедитесь, что типы в массиве соответствуют типам, ожидаемым для каждого столбца, и вам также придется передавать значения обратно в источник данных вручную, если они доступны для редактирования пользователем.
В ответ на ваш комментарий: Перед добавлением строк заполните dataGrid столбцами:
_colId = new DataGridViewTextBoxColumn
{
Name = "Id",
HeaderText = Id.CreationDate,
AutoSizeMode = DataGridViewAutoSizeColumnMode.None,
Width = 150,
ReadOnly = true,
};
//...
dataGrid.Columns.Add(_colId);
dataGrid.Columns.Add( other columns... );
Используйте любые свойства, которые вам нужны в каждом столбце.
Если вы не используете источник данных, я считаю, что вы должны явно добавить столбцы в первую очередь. Как вы знаете столбцы, которые вы хотите показывать, перед тем, как использовать цикл foreach:
dgv.Columns.Add([Column Info]);
Этот метод позволит вам явно создавать столбцы, к которым вы будете добавлять информацию при добавлении строки.