1

我从来没有设法让 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; }
}

我想构建一个显示名称/消息/优先级或这些值的某种组合的表,但绝对不是全部。有什么方法可以简单地从头开始构建表数据,而不必为其提供数据源?

这是我实现以下建议的测试代码,但我得到“No Row can be added to DataGridView control that without columns”。

                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);
                }
4

2 回答 2

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... );

在每列上使用您需要的任何属性。

于 2013-03-21T07:42:54.037 回答
1

如果您不使用数据源,我相信您必须先明确添加列。如您所知,在您使用 foreach 循环之前要显示的列:

dgv.Columns.Add([Column Info]); 

此方法将允许您在添加行信息时显式创建要添加的列。

于 2013-03-21T09:43:02.610 回答