/// <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 } }