0

假设我有两个数据表:

- 在 First Datatableorders中,我检索我的订单列表,例如

--------------------------- 
'order_id '  order        '   
'---------'---------------'   
'   1     ' order details'   
'---------'---------------'   
'   2     ' order details'
'---------'---------------'   
'   3     ' order details'
'---------'---------------'
'   1     ' order details'
'---------'---------------'

- 在第二个数据表中order_details,我检索每个订单的详细信息(如客户、订单价值等)

--------------------------------
'order_id'customer'order_val'...'   
'--------'--------'---------'---'
'order_id'  Cust1 ' Value11 '...'   
'--------'--------'---------'---'
'order_id'  Cust2 ' Value21 '...'   
'--------'--------'---------'---'     

我的问题:创建第二个数据表(如缩略图)并插入datagridview单元格(即替换上表中显示的“订单详细信息”一词)有多远?!

---------------------------
'order_id '  order        '
'---------'---------------'
'   1     ' Cust1 Value11 '
'---------'---------------'
'   2     ' Cust2 Value21 '
'---------'---------------'
4

1 回答 1

2

这一点都不难。您需要CellPainting使用Graphics类绘图方法(如DrawString. 您可能面临的一个问题是,您显然会消耗最少的屏幕空间,因此您可能需要ScaleTransform或以其他方式最小化您想要显示的内容数量。

e.RowIndex将让您访问底层DataRow,然后您可以使用它来访问需要绘制的子行/DataTable。e.ColumnIndex可用于确定将显示表格内容的正确列。是可以让您绘制内容e.Graphics的实际对象。将为您提供绘图区域的大小和位置。Graphicse.CellBounds

CellPainting这是该事件的一个最小示例:

private void dgv_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
  var dgv = (DataGridView)sender;

  //Get the order row
  var row = ((DataRowView)dgv.Rows[e.RowIndex].DataBoundItem).Row;

  //Get child rows of your order row
  var OrdDetails = row.GetChildRows("rel_Order_OrderDetails");

  //An example of how information from one of these child rows can be drawn inside the cell
  e.Graphics.DrawString(OrdDetails[0]["CustomerName"], dgv.Font, Brushes.Black, e.CellBounds.Location);
}

如果您使用的是强类型数据集,上述代码会略有不同,因为您将有直接的方法来访问父行中的子数据。

于 2013-10-20T06:37:23.230 回答