在单个数据网格视图单元格中显示数据表内容
本文关键字:显示 数据表 单元格 视图 单个 数据 数据网 网格 | 更新日期: 2023-09-27 18:36:02
假设我有两个数据表:
-在第一个数据表orders
中,我检索我的订单列表,例如
---------------------------
'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 '
'---------'---------------'
一点也不难。您需要收听CellPainting
事件并使用DrawString
等类绘制方法在该单元格内Graphics
内容。您可能面临的一个问题是,您显然需要消耗的屏幕空间最少,因此您可能需要ScaleTransform
或以其他方式最小化要显示的内容量。
e.RowIndex
将使您能够访问基础DataRow
,然后您可以使用这些访问需要绘制的子行/DataTable。 e.ColumnIndex
可用于确定将显示表内容的正确列。 e.Graphics
是允许您绘制内容的实际Graphics
对象。 e.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);
}
如果您使用的是强类型数据集,则上面的代码会略有不同,因为您将有直接方法来访问父行中的子数据。