0

ですから、家系図のWebサイトに使用しているすべての祖先の名前と生年月日を含むこの表があります。キーはIDであり、すべての子のParentIDアイテムは親のIDと同じに設定されます。

ID - int (key)
FirstName - string
Lastname - string
Born - int
Died - int
ParentID - int
hasChildren - bool

ある種のツリー構造で表示したいのですが(これは後で別の問題になります)、今のところ、GridViewで表示しているだけです。各行の先頭にBranchというボタンがあります。誰かのレコードで[分岐]をクリックすると、select関数が呼び出され、選択したレコードのIDが取得されるため、SELECTコマンドを実行して、選択したレコードのIDと一致するParentIDを持つすべてのレコードを検索できます。そうすることで、選択したレコード(親)のすべての子をグリッドに再設定します。IDとParentIDをグリッドに表示したくないので、次を使用して取得することはできません。

GridViewRow row = GridView1.Rows[GridView1.SelectedIndex];

私が考えていたのは次のようなものでした。

        SqlDataSource ds = (SqlDataSource)GridView1.DataSourceObject;
    string selectstring = "SELECT [ID],[FirstName],[MiddleName],[LastName],[BirthDate],[DeathDate],[ParentID],[hasChild] FROM [test2].[dbo].[Geneology] where ParentID = " + x;
    SqlDataSource2.SelectCommand = selectstring;

ここで、xは選択したレコードIDの文字列です。グリッドビューに表示せずに、選択したレコードのIDを取得する方法を理解できないようです。データソースを作成するときにすべての列を選択しましたが、IDとParentIDを非表示にしました。現在、それらはグリッドビューの行に含まれていません。これについてどうやって行くかについてのアイデアはありますか?これで十分に説明できると思います。

[編集]OK-修正しました。GridView.SelectedValueがIDを返すように、DataKeyをIDに設定する必要がありました。その現在動作しています。グリッドにすべてのレコードを再入力せずに、1つのレベルに戻る方法を理解する必要があります。

4

1 に答える 1

0

おそらく、階層クエリと呼ばれるものを探しているでしょう。

Oracle では、次のようなことを行います。

select t.*
from table t
connect by t.id = t.parent_id
start with t.id = my_id

編集:あなたの質問をもう一度読んだので、あなたは私が何も知らないC#のことについて話していると思うので、私の答えは気にしないでください

于 2013-01-07T00:47:43.233 に答える