/// <summary> /// target以下の論理ツリー上の子要素をコンソール出力。階層分インデントする。 /// 要素がControlでNameを持っていた場合は併せて出力。 /// </summary> private void PrintLogicalChildren(DependencyObject target) { //代入用変数定義 ControlChildren SetVal = new ControlChildren(); var TabId = string.Empty; var MenuName = string.Empty; var TabID = new List <string>(); var ProgramID = new List <string>(); var No = new List <int>(); var Name = new List <string>(); WpfUtil.OperateLogicalChildren(target, t => { String contName = ""; Control cont = t as Control; if (cont != null && cont.Name.Length > 0) { if (cont.GetType() == typeof(Button)) { // 非表示のボタンは表示対象外とする if (cont.Visibility != System.Windows.Visibility.Hidden) { // タブID TabID.Add(TabId); // プログラムID ProgramID.Add(cont.Name); // メニュー番号 int SubNo = Int32.Parse(Convert.ToString(((Button)(cont)).Content).Substring(0, Convert.ToString(((Button)(cont)).Content).IndexOf("."))); No.Add(SubNo); // メニュー名称 Name.Add(Convert.ToString(((Button)(cont)).Content).Substring(Convert.ToString(((Button)(cont)).Content).IndexOf(".") + 1)); } } else if (cont.GetType() == typeof(TabItem)) { MenuName = Convert.ToString(((HeaderedContentControl)(cont)).Header); TabId = cont.Name; } } if (!contName.Equals(string.Empty)) { Console.WriteLine(contName); } } ); //メニュ項目設定 SetVal.TabID = TabID.ToArray(); SetVal.ProgramID = ProgramID.ToArray(); SetVal.No = No.ToArray(); SetVal.Name = Name.ToArray(); MenuList.Add(MenuName, SetVal); }
/// <summary> /// メニューオブジェクトのソート後DataTable作成 /// </summary> /// <returns></returns> private DataTable DispDataSet(DataTable DbTable) { DataSet ds = new DataSet(); DataTable dt = new DataTable("権限マスタデータ"); // 列を追加 dt.Columns.Add("TabID", typeof(int)); dt.Columns.Add("メニュー名称", typeof(string)); dt.Columns.Add("No", typeof(int)); dt.Columns.Add("プログラム名称", typeof(string)); dt.Columns.Add("グループ権限ID", typeof(int)); dt.Columns.Add("プログラムID", typeof(string)); dt.Columns.Add("使用可能FLG", typeof(Boolean)); dt.Columns.Add("データ更新FLG", typeof(Boolean)); dt.Columns.Add("登録日時", typeof(DateTime)); dt.Columns.Add("更新日時", typeof(DateTime)); dt.Columns.Add("削除日付", typeof(DateTime)); dt.Columns["削除日付"].AllowDBNull = true; ds.Tables.Add(dt); // メニュー項目設定 foreach (KeyValuePair <string, ControlChildren> DicList in MenuList) { var MenuName = DicList.Key; ControlChildren SelData = DicList.Value; for (int Cnt = 0; Cnt < SelData.No.Length; Cnt++) { DataRow dr = ds.Tables["権限マスタデータ"].NewRow(); dr["TabID"] = SelData.TabID[Cnt].Replace("Tab", ""); dr["メニュー名称"] = MenuName; dr["No"] = SelData.No[Cnt]; dr["プログラム名称"] = SelData.Name[Cnt]; dr["グループ権限ID"] = IN_グループ権限ID; dr["プログラムID"] = SelData.ProgramID[Cnt].Trim(); dr["使用可能FLG"] = true; dr["データ更新FLG"] = true; dr["登録日時"] = DateTime.Today; dr["更新日時"] = DateTime.Today; dr["削除日付"] = DBNull.Value; dt.Rows.Add(dr); } } DataTable table = dt.Clone(); DataRow[] rows = dt.Select(null, "TabID,No ASC"); foreach (DataRow row in rows) { DataRow addRow = table.NewRow(); // カラム情報をコピー addRow.ItemArray = row.ItemArray; // DataTableに格納 table.Rows.Add(addRow); } // データマージ rows = DbTable.Select(); foreach (DataRow row in rows) { try { DataRow[] SelectRow = table.Select("プログラムID = '" + Convert.ToString(row["プログラムID"]).Trim() + "'"); if (SelectRow.Length > 0) { foreach (DataRow dr in SelectRow) { dr["使用可能FLG"] = row["使用可能FLG"]; dr["データ更新FLG"] = row["データ更新FLG"]; dr["登録日時"] = row["登録日時"]; dr["更新日時"] = row["更新日時"]; } } } catch { continue; } } return(table); }