2013-03-21 36 views
1

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

你可以通过你的票类转换为对象数组,用你感兴趣的领域,然后加入数组到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...); 

使用任何属性。

+0

我完全按照建议给了它一次尝试,但得到错误“没有行可以添加到没有列的DataGridView控件”。我用代码更新了我原来的帖子,但是你知道如何解决这个问题吗?谢谢! – 2013-03-21 08:35:57

+0

工作完美!谢谢! – 2013-03-21 21:58:02

1

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

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

这个方法可以让你明确地创建你将增加当您添加的行信息的列。