我从来没有设法让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可以添加到没有列的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);
}
答案 0 :(得分: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... );
在每列上使用您需要的任何属性。
答案 1 :(得分:1)
如果您不使用数据源,我认为您必须先显式添加列。如您所知,要显示的列在foreach循环之前使用:
dgv.Columns.Add([Column Info]);
此方法允许您在添加行信息时显式创建要添加的列。