Пример #1
0
        /// <summary>
        /// Isi setiap Button yang ada di Form ke tabel role_detail
        /// </summary>
        /// <param name="form">Form target</param>
        /// <param name="formAction">FormAction object</param>
        /// <param name="control">Control target</param>
        private void PopulateButtonToRoleDetail(Form form, FormAction formAction, Control control)
        {
            foreach (Control ctrl in control.Controls)
            {
                // Kita hanya ingin memilih Control Button saja
                if (ctrl is Button)
                {
                    var button = (Button)ctrl;

                    // Lewati Button yang mempunyai Tag ignore
                    if (button.TagIgnore())
                    {
                        continue;
                    }

                    // Ambil menu_name dari Tag Button jika tersedia, sebaliknya ambil dari Text Button
                    string buttonText = button.Tag != null?button.Tag.ToString() : button.Text;

                    // Tambahkan ke kolom act baru jika Button ditemukan
                    _colActNo += 1;
                    string colActName = $"act_{_colActNo}"; // Nama property

                    // Atur property berdasarkan nama dari property
                    // cari property berdasarkan nama (contoh act_1)
                    // lalu isi value property tersebut berdasarkan tag / text dari Button
                    var propertyInfo = formAction.GetType().GetProperty(colActName);
                    propertyInfo.SetValue(formAction, Convert.ChangeType(buttonText, propertyInfo.PropertyType), null);

                    // Buat RoleDetail object
                    var roleDetail = new RoleDetail()
                    {
                        role_kode   = RoleKode,
                        menu_name   = buttonText,
                        menu_parent = form.AccessibleName, // Menu header (parent) di MenuStrip
                        form_action = form.Name,
                        tag         = "action"
                    };

                    // Simpan data Button ke tabel role_detail
                    _roleDetailController.Save(roleDetail);
                }

                PopulateButtonToRoleDetail(form, formAction, ctrl); // Recursive method
            }
        }