DevExpress GridControl主视图不显示信息

时间:2016-11-12 16:35:08

标签: c# datatable devexpress datarow gridcontrol

我有一个来自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;

代码很简单,任何想法为什么不起作用?谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

首先,你已经有了一个对象,Grid可以很好地处理这个问题。因此将其转换为DataRows似乎是不必要的。不要忘记任何对象需要空间,DataRow仍然是一个对象。

此外,List<clsLineaTicket>为您提供对象访问而非DataRow访问。这对于重构来说更具可读性和更好。因此,您可以通过重构轻松地重命名属性。但是如何重命名DataTable中的列?您有时会访问行[&#34; ColumnName&#34;]?然后你迷失了,因为魔法弦不能被重构。让我举一个小例子来说明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的可能性。你需要一个带有门票的SubList,价格低于10美元?

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

如果您使用List,请确保您的FieldNames与Propertynames相对应。如果您想使Grid可编辑,您还需要在Properties上实现setter。

希望这有帮助。