DevExpress GridControl主视图没有显示信息

本文关键字:显示 信息 GridControl 主视图 DevExpress | 更新日期: 2023-09-27 18:17:32

我有一个来自Devexpress的GridControl,我用DataRow对象填充控件。该行已添加到网格中,但单元格为空。下面是代码:

        DataTable dt = new DataTable();
        dt.Columns.Add("Descripcion");
        dt.Columns.Add("Cantidad");
        dt.Columns.Add("Importe");
        gridControl1.DataSource = dt;
        clsLineaTicket newLn = new clsLineaTicket("Gin Tonic Beefeater", "1", "9,20");
        DataRow dr = dt.NewRow();
        dr[0] = newLn.strDescripcion;
        dr[1] = newLn.strCantidad;
        dr[2] = newLn.strImporte;
        dt.Rows.Add(dr);
        gridControl1.DataSource = dt;

代码很简单,知道为什么不工作吗?谢谢你。

DevExpress GridControl主视图没有显示信息

要解决这个问题,你应该将GridColumns的FieldNames设置为DataTable的ColumnNames。

但我强烈建议您使用List<clsLineaTicket>,而不是将其转换为DataTable。

一开始你已经有了一个对象,网格可以很好地处理这个。因此,将其转换为datarow似乎是不必要的。不要忘记任何对象都需要空间,DataRow仍然是一个对象。

进一步,List<clsLineaTicket>为您提供对象访问而不是DataRow访问。这样可读性更强,更适合重构。因此,您可以通过重构轻松地重命名属性。但是如何重命名DataTable中的列呢?你有时访问行["ColumnName"] ?然后你就迷失了,因为魔法字符串不能被重构。让我展示一个小的例子来提高List<T>的可读性:

假设你在事件中双击,你会显示你的票的价格:

//This event is just a dummy and doesn't exists this way
private void grid_click(object sender, EventArgs e)
{
   //DataTable access
   var row = gridview.GetFocusedRow() as DataRowView;
   MessageBox.Show(Convert.ToString(row["Price"]);
   //List access
   var lineaTicket = gridView.GetFocusedRow() as LineaTicket; //You directly see it's a ticket here
   MessageBox.Show(lineaTicket.Price); //You don't need conversion
}

另一个好东西是Lambda和Linq的可能性。您需要一张价格低于10美元的所有门票的子列表吗?

List<clsLineaTicket> lowPriceTickets = ticketList.FindAll(ticket=>ticket.Price < 10);

如果您使用列表,请确保您的FieldNames对应于Propertynames。如果你想让网格可编辑,你还需要在你的属性上实现setter。