同様のタスクを実行しようとしている多くの投稿を読みましたが、問題の適切な解決策を見つけることができません。
実行時にオブジェクトを動的にキャストしようとしています。(多くの人がそれができないと言うことを知っています、そしてそれができるかどうかは実際にはわかりません...)私の問題はTreeView、Windows Forms Applicationを表示するために動的に作成されていることOrg Chartです。
TreeView3つのテーブルからのプルのデータ: Departments、、。JobsEmployees
Tablesasをインポートすると、 Local DataSource3つのテーブルすべてがオブジェクトとして取得され、オブジェクトタイプDataSetのテンプレートがDataRow元のテーブルにキャストされます(プロパティとしてのすべての列を含む)。(linqと同様-Oracle DBを除く)
オブジェクトを作成TreeNodeし、自分の説明フィールドをプロパティDataRowとして使用してから、それ自体をプロパティとしてTreeNode.Textアタッチします。このように、キャストするだけで直接データにアクセスできます。DataRowTreeNode.TagTreeNode
dsMyDataSource.DepartmentRow =
(dsMyDataSource.DepartmentRow)treeview1.SelectedNode.Tag;
基になるオブジェクトデータの一部をウィンドウに表示するNodeontreeview1をユーザーが選択するたびに実行されるメソッドがあります。Details現在のところ、switchステートメントを含む単一のメソッドがあります。
private doSomething()
{
switch(treeview1.SelectedNode.Tag.GetType().Name)
{
case "dsMyDataSource.DepartmentRow":
dsMyDataSource.DepartmentRow department =
(dsMyDataSource.DepartmentRow)treeview1.SelectedNode.Tag;
lblDetailsTitle = department.Title;
break;
case "dsMyDataSource.JobRow":
//etc...
}
}
私がやりたいのは、タイプごとにオーバーロードされたメソッドを用意し、switchステートメントを削除することです。そのようです:
this.doSomething(treeview1.SelectedNode.Tag);
問題は、これがベースオブジェクト(つまりキャスト)を返すことです。しかし、コンパイル時に、ユーザーがどのタイプのTreeNodeを選択するかはわかりません。したがって、私は次のようなことができるようにしたいと思います。
this.doSomething((treeview1.SelectedNode.Tag.GetType())treeview1.SelectedNode.Tag);
private void doSomething(dsMyDataSource.DepartmentRow department)
{
lblDetailsTitle = department.Title;
// etc...
}
private void doSomething(dsMyDataSource.JobRow job) {..}
private void doSomething(dsMyDataSource.EmployeeRow employee) {..}
これは可能ですか?