0

2 つのデータテーブルがあるとします。

- First Datatableordersで、次のように注文のリストを取得します

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

- 2 番目order_detailsのデータ テーブルでは、各注文の詳細 (顧客、注文額など) を取得します。

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

私の質問: 2 番目のデータ テーブルを (サムネイルのように) 作成し、datagridviewセルに挿入すること (つまり、上の表に示すように「注文の詳細」という言葉を置き換えること) はどのくらい可能ですか?!

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

1 に答える 1

2

それはまったく難しいことではありません。イベントをリッスンし、のようなクラス描画メソッドCellPaintingを使用してそのセル内にコンテンツを描画する必要があります。直面する可能性のある問題の 1 つは、消費する画面領域が明らかに最小限になることです。そのため、表示するコンテンツの量を最小限にする必要があるか、そうでなければ最小限に抑える必要があるかもしれません。GraphicsDrawStringScaleTransform

e.RowIndexDataRow描画する必要がある子行/ 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);
}

厳密に型指定された DataSet を使用している場合、親行の子データに直接アクセスするメソッドがあるため、上記のコードは若干異なります。

于 2013-10-20T06:37:23.230 に答える