2013-10-20 86 views
0

假如我有兩個數據表:在單個DataGridView單元中顯示數據表內容?

- 在第一數據表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 '...' 
'--------'--------'---------'---'  

我的問題: 多遠可能的第二個數據表的建立(如縮略圖),並在插入小區(即用上表中所示的「訂單細節」替換)?

--------------------------- 
'order_id ' order  ' 
'---------'---------------' 
' 1  ' Cust1 Value11 ' 
'---------'---------------' 
' 2  ' Cust2 Value21 ' 
'---------'---------------' 
+0

非常感謝編輯@MrW – user2888402

回答

2

這並不難。您需要傾聽CellPainting事件並使用Graphics類圖繪製方法(如DrawString)在該單元格內繪製您的內容。您可能會遇到的一個問題是,您顯然只能使用最少的屏幕空間,因此您可能需要ScaleTransform或以其他方式最小化要顯示的內容數量。

e.RowIndex將使您能夠訪問底層DataRow,然後您可以使用它訪問需要繪製的子行/ DataTable。 e.ColumnIndex可用於確定將顯示錶格內容的正確列。 e.Graphics是可讓您繪製內容的實際Graphics對象。 e.CellBounds將爲您提供繪圖區域的大小和位置。

這裏是CellPainting事件的一個小例子:如果你使用強類型DataSet

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); 
} 

,上面的代碼會略有不同,你將有直接的方法來訪問你的子數據父行。

+0

非常感謝 – user2888402

相關問題