2013-03-21 66 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]); 

這個方法可以讓你明確地創建你將增加當您添加的行信息的列。