掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ノードごとに他データを保持するには? (ID:144998)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
プログラム初心者のmamaと申します。 今、VB.NET2005で開発を行っており、既存プログラムの修正を行っております。 実装に困っている箇所があり皆様にアドバイスいただけないかと書き込みをした次第です。 現状の動作: SQLを発行し、会社情報を取得→取得した会社情報をtreeViewにツリー表示(組織階層で表示されています。[会社名-支社名-営業所名-部署名]) ツリーをドラッグアンドドロップすることにより、階層(所属)を変更できるようになっています。 下記のような、ツリー表示を行うコードがあり、ノードはそれぞれ[得意先ID(一意キー)]をもっています。 それぞれの得意先は[会社コード][支社コード][営業所コード]・・・を持っておりそれぞれ、ぶら下り関係を持っています。 例:会社コード1:支社コード以下0 ⇒会社 :会社コード1:支社コード2 ⇒会社1に所属する支社 という感じになっております。 今回新たに、階層に所属する個人をリストビューに表示し、さらにドラッグアンドドロップで所属変更可能とし、最終確定ボタンで更新するという動きを追加することになりました。 ※個人の取得は各得意先IDから会社コードなどを取得し、会社コード、支店コード、営業所コード・・・と一致するデータを取得。 各ノードに対して個人の情報を保持しておく必要があり、実装方法に困っています。 どうか、小さなヒントになるようなことでも結構ですのでアドバイスいただけませんでしょうか。 よろしくお願いいたします。 以下ツリー表示部のコードです。 Dim TargetNodes() As TreeNode Dim key As String Dim keyShiten As String = String.Empty Dim keyEigyosho As String = String.Empty Dim keyShozoku1 As String = String.Empty Dim Blevel As Integer = -1 Dim BNode As TreeNode = Nothing For j As Integer = 0 To List.Count - 1 With List.Item(j) If addFlg = False Then 'TopNode Me.treDetail.Nodes.Add(.TokuisakiId, Me.GetDispNameKj(List.Item(j))) addFlg = True Else '自分の上位の階層を検索 key = Me.GetKeyNo(List.Item(j), List.Item(j).SoshikiKb) If key <> "" Then TargetNodes = Me.treDetail.Nodes.Find(key, True) If TargetNodes.Length > 0 Then TargetNodes(0).Nodes.Add(.TokuisakiId, Me.GetDispNameKj(List.Item(j))) Else Me.treDetail.SelectedNode.Nodes.Add(.TokuisakiId, Me.GetDispNameKj(List.Item(j))) End If Blevel = -1 BNode = Nothing Else If .SoshikiKb.Trim = Blevel.ToString Then BNode.Nodes.Add(.TokuisakiId, Me.GetDispNameKj(List.Item(j))) Else Select Case .SoshikiKb.Trim Case "3" '営業所 '会社にダミー支店を追加 keyShiten = BLANK_NODE.KEY_SHITEN + Me._SeqShiten.ToString() Me.treDetail.Nodes(0).Nodes.Add(keyShiten, BLANK_NODE.VALUE_SHITEN) Me._SeqShiten += 1 '不具合修正 2008/05/23 k-asano END 'ダミー支店の下に営業所を設定 TargetNodes = Me.treDetail.Nodes.Find(keyShiten, True) If TargetNodes.Length > 0 Then TargetNodes(0).Nodes.Add(.TokuisakiId, Me.GetDispNameKj(List.Item(j))) BNode = TargetNodes(0) End If Case "4" '所属1 '支店があるか検索 key = Me.GetKeyNo(List.Item(j), _ Convert.ToString(Convert.ToInt16(List.Item(j).SoshikiKb) - 1)) If key <> "" Then TargetNodes = Me.treDetail.Nodes.Find(key, True) If TargetNodes.Length > 0 Then 'ダミー営業所を追加 keyEigyosho = BLANK_NODE.KEY_EIGYOSHO + Me._SeqEighosho.ToString() TargetNodes(0).Nodes.Add(keyEigyosho, BLANK_NODE.VALUE_EIGYOSHO) Me._SeqEighosho += 1 End If Else '会社にダミー支店を追加 key = BLANK_NODE.KEY_SHITEN + Me._SeqShiten.ToString() Me.treDetail.Nodes(0).Nodes.Add(keyShiten, BLANK_NODE.VALUE_SHITEN) Me._SeqShiten += 1 'ダミー支店の下にダミー営業所を設定 TargetNodes = Me.treDetail.Nodes.Find(keyShiten, True) If TargetNodes.Length > 0 Then keyEigyosho = BLANK_NODE.KEY_EIGYOSHO + Me._SeqEighosho.ToString() TargetNodes(0).Nodes.Add(keyEigyosho, BLANK_NODE.VALUE_EIGYOSHO) Me._SeqEighosho += 1 End If End If 'ダミー営業所の下に所属1を追加 TargetNodes = Me.treDetail.Nodes.Find(keyEigyosho, True) If TargetNodes.Length > 0 Then TargetNodes(0).Nodes.Add(.TokuisakiId, Me.GetDispNameKj(List.Item(j))) BNode = TargetNodes(0) End If Case "5" '所属2 '営業所があるか検索 key = Me.GetKeyNo(List.Item(j), _ Convert.ToString(Convert.ToInt16(List.Item(j).SoshikiKb) - 1)) If key <> "" Then '.TokuisakiId Then TargetNodes = Me.treDetail.Nodes.Find(key, True) If TargetNodes.Length > 0 Then 'ダミー所属1を追加 keyShozoku1 = BLANK_NODE.KEY_SHOZOKU_1 + Me._SeqEighosho.ToString() TargetNodes(0).Nodes.Add(keyShozoku1, BLANK_NODE.VALUE_SHOZOKU_1) Me._SeqShozoku1 += 1 End If Else '支店があるか検索 key = Me.GetKeyNo(List.Item(j), _ Convert.ToString(Convert.ToInt16(List.Item(j).SoshikiKb) - 2)) If key <> "" Then '.TokuisakiId Then TargetNodes = Me.treDetail.Nodes.Find(key, True) If TargetNodes.Length > 0 Then '支店にダミー営業所を追加 keyEigyosho = BLANK_NODE.KEY_EIGYOSHO + Me._SeqEighosho.ToString() TargetNodes(0).Nodes.Add(keyEigyosho, BLANK_NODE.VALUE_EIGYOSHO) Me._SeqEighosho += 1 End If Else '会社にダミー支店を追加 key = BLANK_NODE.KEY_SHITEN + Me._SeqShiten.ToString() Me.treDetail.Nodes(0).Nodes.Add(keyShiten, BLANK_NODE.VALUE_SHITEN) Me._SeqShiten += 1 'ダミー支店の下にダミー営業所を設定 TargetNodes = Me.treDetail.Nodes.Find(keyShiten, True) If TargetNodes.Length > 0 Then keyEigyosho = BLANK_NODE.KEY_EIGYOSHO + Me._SeqEighosho.ToString() TargetNodes(0).Nodes.Add(keyEigyosho, BLANK_NODE.VALUE_EIGYOSHO) Me._SeqEighosho += 1 End If End If 'ダミー営業所の下にダミー所属1を追加 TargetNodes = Me.treDetail.Nodes.Find(keyEigyosho, True) If TargetNodes.Length > 0 Then keyShozoku1 = BLANK_NODE.KEY_SHOZOKU_1 + Me._SeqEighosho.ToString() TargetNodes(0).Nodes.Add(keyShozoku1, BLANK_NODE.VALUE_SHOZOKU_1) Me._SeqShozoku1 += 1 End If End If 'ダミー所属1の下に所属2を追加 TargetNodes = Me.treDetail.Nodes.Find(keyShozoku1, True) If TargetNodes.Length > 0 Then TargetNodes(0).Nodes.Add(.TokuisakiId, Me.GetDispNameKj(List.Item(j))) BNode = TargetNodes(0) End If Case Else '不具合修正 2008/05/23 k-asano START '親ノード検索 key = Me.GetKeyNo(List.Item(j), Convert.ToString(Convert.ToInt16(List.Item(j).SoshikiKb) - 1)) Dim parentNode As TreeNode = Nothing parentNode = Me.SearchParentNode(List.Item(j), key, Convert.ToInt16(List.Item(j).SoshikiKb) - 1) 'ノードを追加 parentNode.Nodes.Add(.TokuisakiId, Me.GetDispNameKj(List.Item(j))) BNode = parentNode End Select End If Blevel = CType(.SoshikiKb.Trim, Integer) End If End If End With Next 'Nodesの展開 Me.treDetail.TopNode.ExpandAll() End Sub
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.