Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
        }