Ну а теперь по-порядку. Понадобилось мне в таблице разместить список предопределённых значений, содержащихся всё в той же моей БД. Струкруту БД приводить не буду, т.к. она находится в стадии разработки и планирования. Пока только учусь с ней работать и получать то, что мне нужно от неё. В общем, имеем 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();
}
Расписывать сильно не буду, ибо, думаю, итак всё понятно. Старался обзывать контролы человекопонятным языком.
Комментариев нет:
Отправить комментарий
Уважаемый комментатор, пишите грамотно.
С благодарностью, автор блога.