Ну а теперь по-порядку. Понадобилось мне в таблице разместить список предопределённых значений, содержащихся всё в той же моей БД. Струкруту БД приводить не буду, т.к. она находится в стадии разработки и планирования. Пока только учусь с ней работать и получать то, что мне нужно от неё. В общем, имеем 2 таблицы:
Поля APP_INSTALL:ACTION_ и ACTION_FILE:ACTION_ID каким-то образом должны быть связаны (не MasterDetail). Т.к. при создании новой записи пользователю должны предлагаться предопределённые действия с таблицы ACTION_FILE, а записываться в таблицу APP_INSTALL ACTION_ID.
Не найдя на просторах интернета готовые решения начал придумывать своё. Решение пришло само (озарение, прям) через 3 дня раздумий и переборов вариантов. В общем, вот. Чтобы и самому не забыть, и может кому ещё пригодится. На оригинальность не претендую совершенно. Интересно было бы увидеть и другие возможные варианты решений.
FbConnection fbconn = new FbConnection(); DataSet ds = new DataSet(); FbDataAdapter da_app_inst; FbDataAdapter da_action_file; BindingSource bs_app_inst; BindingSource bs_action_file; string _AppPath = Application.StartupPath; private string SQLConnect(String DB) { FbConnectionStringBuilder cb = new FbConnectionStringBuilder(); cb.Database = DB; cb.ServerType = FbServerType.Embedded; cb.ClientLibrary = _AppPath + @"\lib\fbembed.dll"; cb.Charset = "UNICODE_FSS"; cb.UserID = "SYSDBA"; cb.Password = "masterkey"; return cb.ToString(); } private void frm_Applications_Load(object sender, EventArgs e) { dgv_app.AutoGenerateColumns = false; fbconn.ConnectionString = SQLConnect(_AppPath + @"\DB\MAIN.FDB"); da_app_inst = new FbDataAdapter(@"SELECT * FROM app_install", fbconn); da_app_inst.Fill(ds, "app_install"); da_action_file = new FbDataAdapter(@"SELECT * FROM action_file", fbconn); da_action_file.Fill(ds, "action_file"); bs_app_inst = new BindingSource(); bs_app_inst.DataSource = ds; bs_app_inst.DataMember = "app_install"; dgv_app.DataSource = bs_app_inst; bs_action_file = new BindingSource(); bs_action_file.DataSource = ds; bs_action_file.DataMember = "action_file"; DataGridViewComboBoxColumn dgv_app_combo = new DataGridViewComboBoxColumn(); DataGridViewTextBoxColumn dgv_app_from = new DataGridViewTextBoxColumn(); dgv_app_from.DataPropertyName = "FROM_"; dgv_app_from.HeaderText = "Откуда"; dgv_app.Columns.Add(dgv_app_from); DataGridViewComboBoxColumn dgv_app_action = new DataGridViewComboBoxColumn(); dgv_app_action.DataSource = bs_app_inst; dgv_app_action.DataPropertyName = "action_"; dgv_app_action.HeaderText = "Действие"; dgv_app.Columns.Add(dgv_app_action); DataGridViewTextBoxColumn dgv_app_to = new DataGridViewTextBoxColumn(); dgv_app_to.DataPropertyName = "TO_"; dgv_app_to.HeaderText = "Где"; dgv_app.Columns.Add(dgv_app_to); DataGridViewComboBoxCell cbc = new DataGridViewComboBoxCell(); dgv_app_action.CellTemplate = cbc; cbc.DataSource = ds.Tables["action_file"]; cbc.ValueMember = "ACTION_ID"; cbc.DisplayMember = "name"; fbconn.Close(); }Расписывать сильно не буду, ибо, думаю, итак всё понятно. Старался обзывать контролы человекопонятным языком.
Комментариев нет:
Отправить комментарий
Уважаемый комментатор, пишите грамотно.
С благодарностью, автор блога.