■No60556 (きゃむ さん) に返信
> 今回のようにDataGridViewを継承したコントロールを作成する場合、
> DataGridView.DataSourceからどう辿ればDataTableに行き着くのか特定できません。
DataSource にバインドされるのは、DataSet / DataTable / DataView / BindingSource 等々、
いろいろなオブジェクトがあり得ます。まずは、DataSource プロパティから得たオブジェクトの
データ型を object.GetType プロパティなどから調べてみましょう。
> バインド方法が特定されていない場合に対応した、DataTableの取得方法というのはあるのでしょうか。
DataSource プロパティから辿る方法の他、DataGridView の行オブジェクトから
DataBoundItem プロパティ経由で DataRowView オブジェクトを得る手法もあります。
DataRowView のインスタンスさえ得られれば、その Row プロパティから
親となる DataRow インスタンスを得られますし、さらにそこから
Table プロパティで DataTable インスタンスを得ることもできます。
DataRowView rowView = dataGridView1.Rows[0].DataBoundItem as DataRowView;
if (rowView != null)
{
DataRow row = rowView.Row;
DataTable tbl = row.Table;
if (tbl != null)
{
DataSet ds = tbl.DataSet;
}
}
|