public TableRecordEditorNew(string tn, DataRow row, bool write_rights) { InitializeComponent(); dt_data = new DataTable(); dt_data.Columns.Add("Description", typeof(String)); dt_data.Columns.Add("Data", typeof(EditingValue)); table_name = tn; current_row = row; DataTable dt_table_db_name = DBFunctions.ReadFromDB("SELECT DISTINCT TableDBName FROM tableconfig WHERE TableName = '" + table_name + "'"); if (dt_table_db_name.Rows.Count != 0) { table_db_name = (string)dt_table_db_name.Rows[0]["TableDBName"]; } else { throw new Exception("Таблица не найдена в базе данных."); } dt_table_structure = DBFunctions.ReadFromDB("SELECT ColumnName,ColumnDBName,ColumnType,ColumnReference,ReferenceMultiSelect FROM tableconfig WHERE TableName = '" + table_name + "'"); tsbOk.Enabled = write_rights; foreach (DataRow struct_row in dt_table_structure.Rows) { DataRow new_row = dt_data.NewRow(); new_row["Description"] = struct_row["ColumnName"]; EditingValue ev = new EditingValue(); ev.FieldDBName = (string)struct_row["ColumnDBName"]; ev.FieldName = (string)struct_row["ColumnName"]; ev.isReference = (Convert.ToString(struct_row["ColumnType"]) == "Справочник"); ev.Value = current_row[ev.FieldDBName]; if (ev.isReference) { ev.RefDBName = (string)struct_row["ColumnReference"]; ev.isMultiRef = (bool)struct_row["ReferenceMultiSelect"]; } ev.SetDisplayName(); new_row["Data"] = ev; dt_data.Rows.Add(new_row); } }
private void tsbOk_Click(object sender, EventArgs e) { foreach (DataRow row in dt_data.Rows) { EditingValue ev = (EditingValue)row["Data"]; try { if (ev.Value is String && (string)ev.Value == "" && current_row[ev.FieldDBName] == System.DBNull.Value) { continue; } current_row[ev.FieldDBName] = ev.Value; } catch (Exception) { System.Windows.Forms.MessageBox.Show("Вы ввели неверное значение для поля " + ev.FieldName, "Ошибка", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); return; } } DialogResult = System.Windows.Forms.DialogResult.OK; Close(); }