public static string GetColumValue(WindowMetaList windowMetaList, string columnName) { string columnValue = string.Empty; foreach (var columns in windowMetaList.Columns) { if (columns.ColumnName == columnName) { columnValue = columns.ColumnValue; break; } } return(columnValue); }
private void WinConstruct(Int32 applicationTableId) //Builds the window for applicationTableId { string controlStyle = null; //These dictionaries are used to pass control values between classes for each instance of a window Dictionary <string, string> controlValues = new Dictionary <string, string>(); //Dictionary<string, string> controlValueDefaults = new Dictionary<string, string>(); //Dictionary<string, string> controlValueRequired = new Dictionary<string, string>(); Int32 selectedDataGridRowIdVal = 0; Int32 selectedFilter = 0; string displayMember = String.Empty; //Set the metadata values specific to the applicationTableId for the instance of the window WindowMetaList windowMetaList = WindowTasks.WinMetadataList(applicationTableId); //Create a new window - we will add various UI elements to the window based on the applicationTableId Window winNew = WindowBuildUtils.CreateWindow(windowMetaList, applicationTableId); //Main layout Grid - 2 cols by 3 rows Grid mainGrid = WindowBuildUtils.CreateMainGrid(); //Data Grids //Create a Grid containing a DataGrid to display rows from the underlying applicatioin table Grid dataGrid = new Grid(); DataGrid windowDataGrid = WindowBuildUtils.CreateDataGridInGrid("DataGridStyle", "DataGridGridStyle", "ControlBorderStyle", dataGrid); //A Grid containing a StackPanel for the Editing controls Grid editGrid = new Grid(); StackPanel editStkPnl = WindowBuildUtils.CreateStackPanelInGrid("winEditPanelStyle", "ControlGridStyle", "ControlBorderStyle", editGrid); NameScope.SetNameScope(editStkPnl, new NameScope()); //A Grid containg a StackPanel for the Filter selector Grid fltGrid = new Grid(); StackPanel fltStkPnl = WindowBuildUtils.CreateStackPanelInGrid("winFilterStack", "ControlGridStyle", "ControlBorderStyle", fltGrid); //A Grid containing a StackPane for the Buttons Grid buttonGrid = new Grid(); StackPanel buttonStkPnl = WindowBuildUtils.CreateStackPanelInGrid("winButtonStack", "ControlGridStyle", "ControlBorderStyle", buttonGrid); //A Grid containg a StackPanel for the Record selectors Grid recordSelectorGrid = new Grid(); StackPanel recordSelectorStkPnl = WindowBuildUtils.CreateStackPanelInGrid("winPageSelectorStack", "ControlGridStyle", "ControlBorderStyle", recordSelectorGrid); //A Grid containing a StackPanel for the Message area Grid messageGrid = new Grid(); StackPanel messageStkPnl = WindowBuildUtils.CreateStackPanelInGrid("winMessageStack", "ControlGridStyle", "ControlBorderStyle", messageGrid); //Other Controls //Label & Combo for Filter Selector Label labelFlt = WindowBuildUtils.CreateLabel("Select Filter", "winLabelStyle"); ComboBox winFlt = WindowBuildUtils.CreateFilterCombo(windowMetaList); //The buttons Button btnSave = WindowBuildUtils.CreateButton("btnSave", "Save", "winButtonStyle"); Button btnNew = WindowBuildUtils.CreateButton("btnNew", "New", "winButtonStyle"); Button btnDelete = WindowBuildUtils.CreateButton("btnDel", "Delete", "winButtonStyle"); Button btnClear = WindowBuildUtils.CreateButton("btnClear", "Clear", "winButtonStyle"); Button btnExit = WindowBuildUtils.CreateButton("btnExit", "Exit", "winButtonStyle"); //The record selector controls Button btnPrevPage = WindowBuildUtils.CreateButton("btnPrevPage", "<", "winTinyButtonStyle"); Button btnNextPage = WindowBuildUtils.CreateButton("btnNextPage", ">", "winTinyButtonStyle"); TextBox tbSelectorText = WindowBuildUtils.CreateTextBox("tbSelectorText", string.Empty, "winTinyTextBoxStyle", Visibility.Visible); TextBox tbOffset = WindowBuildUtils.CreateTextBox("tbOffset", "0", "winTinyTextBoxStyle", Visibility.Collapsed); TextBox tbFetch = WindowBuildUtils.CreateTextBox("tbFetch", windowMetaList.PageRowCount, "winTinyTextBoxStyle", Visibility.Collapsed); //The Message control TextBox tbWinMode = WindowBuildUtils.CreateTextBox("tbWinMode", string.Empty, "winMessageTextBoxStyle", Visibility.Collapsed); //Create and Add controls to the window editing area Stack panel based on underlying database columns foreach (var columns in windowMetaList.Columns) { controlValues.Add(columns.ColumnName, null); string toolTip = columns.ColumnLabel + "\r\n\n" + "Required = " + columns.ColumnRequiredValue + "\r\n\n" + columns.ColumnDescription; if (columns.ColumnType != "ID") { switch (columns.ColumnRequiredValue) { case "True": controlStyle = "winLabelRequiredStyle"; break; case "False": controlStyle = "winLabelStyle"; break; } Label lbl = WindowBuildUtils.CreateLabel(columns.ColumnLabel, controlStyle); editStkPnl.Children.Add(lbl); } switch (columns.ColumnType) { case "ID": TextBox rowKey = WindowBuildUtils.CreateTextBox(columns.ColumnName, "winTextBoxStyle", columns.ColumnEnabled, columns.ColumnType, toolTip); rowKey.TextChanged += new TextChangedEventHandler((s, e) => { WindowDataOps.WinGetControlValue(rowKey, controlValues); }); editStkPnl.Children.Add(rowKey); editStkPnl.RegisterName(rowKey.Name, rowKey); break; case "TEXT": switch (columns.ColumnRequiredValue) { case "True": controlStyle = "winTextBoxRequiredStyle"; break; case "False": controlStyle = "winTextBoxStyle"; break; } TextBox tb = WindowBuildUtils.CreateTextBox(columns.ColumnName, controlStyle, columns.ColumnEnabled, columns.ColumnType, toolTip); tb.TextChanged += new TextChangedEventHandler((s, e) => { WindowDataOps.WinGetControlValue(tb, controlValues); }); editStkPnl.Children.Add(tb); editStkPnl.RegisterName(tb.Name, tb); break; case "TEXTBLOCK": case "ROWSOURCE": case "FILTER": case "ORDERBY": switch (columns.ColumnRequiredValue) { case "True": controlStyle = "winTextBlockRequiredStyle"; break; case "False": controlStyle = "winTextBlockStyle"; break; } TextBox tbk = WindowBuildUtils.CreateTextBox(columns.ColumnName, controlStyle, columns.ColumnEnabled, columns.ColumnType, toolTip); tbk.TextChanged += new TextChangedEventHandler((s, e) => { WindowDataOps.WinGetControlValue(tbk, controlValues); }); editStkPnl.Children.Add(tbk); editStkPnl.RegisterName(tbk.Name, tbk); break; case "NUM": controlStyle = "winNumBoxStyle"; TextBox nb = WindowBuildUtils.CreateTextBox(columns.ColumnName, controlStyle, columns.ColumnEnabled, columns.ColumnType, toolTip); nb.PreviewTextInput += ApplicationUtils.NumberValidationTextBox; nb.TextChanged += new TextChangedEventHandler((s, e) => { WindowDataOps.WinGetControlValue(nb, controlValues); }); editStkPnl.Children.Add(nb); editStkPnl.RegisterName(nb.Name, nb); break; case "CHK": controlStyle = "winCheckBoxStyle"; CheckBox chk = WindowBuildUtils.CreateCheckBox(columns.ColumnName, controlStyle, columns.ColumnEnabled, columns.ColumnType, toolTip); chk.Checked += new RoutedEventHandler((s, e) => { WindowDataOps.WinGetControlValue(chk, controlValues); }); chk.Unchecked += new RoutedEventHandler((s, e) => { WindowDataOps.WinGetControlValue(chk, controlValues); }); chk.Indeterminate += new RoutedEventHandler((s, e) => { WindowDataOps.WinGetControlValue(chk, controlValues); }); editStkPnl.Children.Add(chk); editStkPnl.RegisterName(chk.Name, chk); break; case "DATE": controlStyle = "winDatePickerStyle"; DatePicker dtp = WindowBuildUtils.CreateDatePicker(columns.ColumnName, controlStyle, columns.ColumnEnabled, columns.ColumnType, toolTip); editStkPnl.Children.Add(dtp); editStkPnl.RegisterName(dtp.Name, dtp); break; case "COMBO": controlStyle = "winComboBoxStyle"; ComboBox cb = WindowBuildUtils.CreateComboBox(columns.ColumnName, controlStyle, columns.ColumnEnabled, columns.ColumnType, toolTip); cb.DropDownClosed += new EventHandler((s, e) => { if (cb.SelectedValue != null) { WindowDataOps.WinGetControlValue(cb, controlValues); if (windowMetaList.WinMode != "EDIT") { DatabaseDataOps.DbGetDataGridRows(winNew, windowMetaList, editStkPnl, fltStkPnl, windowDataGrid, selectedFilter, controlValues, tbOffset, tbSelectorText); } } else { cb.Text = displayMember; } }); cb.DropDownOpened += new EventHandler((s, e) => { displayMember = cb.Text; DataTable comboDataTable = new DataTable(); comboDataTable = WindowDataOps.WinPopulateCombo(cb, windowMetaList, cb.Name, controlValues); cb.ItemsSource = comboDataTable.DefaultView; cb.DisplayMemberPath = comboDataTable.Columns["display_member"].ToString(); cb.SelectedValuePath = comboDataTable.Columns["value_member"].ToString(); }); //Populate Combo if (columns.ColumnOrderBy == string.Empty) { columns.ColumnOrderBy = "\nORDER BY 1"; } else { columns.ColumnOrderBy = "\nORDER BY " + columns.ColumnOrderBy; } columns.ColumnRowSource += columns.ColumnOrderBy; columns.ColumnRowSource = WindowDataOps.SubstituteWindowParameters(columns.ColumnRowSource, controlValues); NpgsqlCommand getComboRows = new NpgsqlCommand(); Int32 selectedRowIdVal = WindowTasks.DataGridGetId(windowDataGrid); getComboRows.CommandText = columns.ColumnRowSource; getComboRows.CommandType = CommandType.Text; getComboRows.Connection = windowMetaList.ApplicationDb; windowMetaList.ApplicationDb.Open(); { NpgsqlDataAdapter comboAdapter = new NpgsqlDataAdapter(getComboRows); DataTable comboDataTable = new DataTable(); comboAdapter.Fill(comboDataTable); cb.ItemsSource = comboDataTable.DefaultView; cb.DisplayMemberPath = comboDataTable.Columns["display_member"].ToString(); cb.SelectedValuePath = comboDataTable.Columns["value_member"].ToString(); editStkPnl.Children.Add(cb); editStkPnl.RegisterName(cb.Name, cb); } windowMetaList.ApplicationDb.Close(); break; } } //Event Handler's //Data Grid windowDataGrid.SelectionChanged += new SelectionChangedEventHandler((s, e) => { if (windowDataGrid.SelectedItem == null) { return; } windowMetaList.GridSelectedIndex = windowDataGrid.SelectedIndex; WindowTasks.WinSetMode("EDIT", winNew, btnSave, btnNew, btnDelete, btnExit, btnClear, windowMetaList, tbWinMode); WindowDataOps.WinDataGridClicked(windowMetaList, windowDataGrid, 0, editStkPnl, controlValues); }); //Filter Selector winFlt.DropDownClosed += new EventHandler((s, e) => { ComboBox clicked = (ComboBox)s; selectedFilter = (Int32)clicked.SelectedValue; WindowTasks.WinSetMode("CLEAR", winNew, btnSave, btnNew, btnDelete, btnExit, btnClear, windowMetaList, tbWinMode); WindowTasks.WinResetRecordSelector(tbSelectorText, tbOffset, tbFetch, windowMetaList); DatabaseDataOps.DbGetDataGridRows(winNew, windowMetaList, editStkPnl, fltStkPnl, windowDataGrid, selectedFilter, controlValues, tbOffset, tbSelectorText); WindowTasks.WinClearDataFields(winNew, editStkPnl, fltStkPnl, true, windowMetaList, controlValues); WindowTasks.WinSetControlDefaultValues(editStkPnl, windowMetaList); } ); //buttons btnSave.Click += new RoutedEventHandler((s, e) => { switch (windowMetaList.WinMode) { case "NEW": if (DatabaseDataOps.DbCreateRecord(winNew, windowMetaList, editStkPnl, fltStkPnl, windowDataGrid, selectedFilter, controlValues, tbOffset, tbFetch, tbSelectorText) == true) { WindowTasks.WinClearDataFields(winNew, editStkPnl, fltStkPnl, true, windowMetaList, controlValues); WindowTasks.WinSetControlDefaultValues(editStkPnl, windowMetaList); WindowTasks.WinSetMode("NEW", winNew, btnSave, btnNew, btnDelete, btnExit, btnClear, windowMetaList, tbWinMode); DatabaseDataOps.DbGetDataGridRows(winNew, windowMetaList, editStkPnl, fltStkPnl, windowDataGrid, selectedFilter, controlValues, tbOffset, tbSelectorText); } break; case "EDIT": selectedDataGridRowIdVal = WindowTasks.DataGridGetId(windowDataGrid); if (DatabaseDataOps.DbUpdateRecord(windowMetaList, windowDataGrid, editStkPnl) == true) { WindowTasks.WinSetMode("EDIT", winNew, btnSave, btnNew, btnDelete, btnExit, btnClear, windowMetaList, tbWinMode); DatabaseDataOps.DbGetDataGridRows(winNew, windowMetaList, editStkPnl, fltStkPnl, windowDataGrid, selectedFilter, controlValues, tbOffset, tbSelectorText); WindowTasks.WinDataGridSelectRow(selectedDataGridRowIdVal, windowDataGrid, windowMetaList); WindowDataOps.WinDataGridClicked(windowMetaList, windowDataGrid, selectedDataGridRowIdVal, editStkPnl, controlValues); } break; } }); btnNew.Click += new RoutedEventHandler((s, e) => { windowDataGrid.SelectedItem = null; WindowTasks.WinSetMode("NEW", winNew, btnSave, btnNew, btnDelete, btnExit, btnClear, windowMetaList, tbWinMode); WindowTasks.WinClearDataFields(winNew, editStkPnl, fltStkPnl, true, windowMetaList, controlValues); WindowTasks.WinSetControlDefaultValues(editStkPnl, windowMetaList); }); btnDelete.Click += new RoutedEventHandler((s, e) => { DatabaseDataOps.DbDeleteRecord(windowMetaList, windowDataGrid); DatabaseDataOps.DbGetDataGridRows(winNew, windowMetaList, editStkPnl, fltStkPnl, windowDataGrid, selectedFilter, controlValues, tbOffset, tbSelectorText); WindowTasks.WinSetMode("CLEAR", winNew, btnSave, btnNew, btnDelete, btnExit, btnClear, windowMetaList, tbWinMode); WindowTasks.WinClearDataFields(winNew, editStkPnl, fltStkPnl, true, windowMetaList, controlValues); WindowTasks.WinSetControlDefaultValues(editStkPnl, windowMetaList); }); btnExit.Click += new RoutedEventHandler(WindowTasks.WinClose); btnClear.Click += new RoutedEventHandler((s, e) => { selectedFilter = 0; winFlt.SelectedIndex = selectedFilter; WindowTasks.WinClearDataFields(winNew, editStkPnl, fltStkPnl, false, windowMetaList, controlValues); WindowTasks.WinResetRecordSelector(tbSelectorText, tbOffset, tbFetch, windowMetaList); WindowTasks.WinSetMode("CLEAR", winNew, btnSave, btnNew, btnDelete, btnExit, btnClear, windowMetaList, tbWinMode); WindowDataOps.WinClearControlDictionaryValues(controlValues); DatabaseDataOps.DbGetDataGridRows(winNew, windowMetaList, editStkPnl, fltStkPnl, windowDataGrid, selectedFilter, controlValues, tbOffset, tbSelectorText); }); tbOffset.TextChanged += new TextChangedEventHandler((s, e) => { DatabaseDataOps.DbGetDataGridRows(winNew, windowMetaList, editStkPnl, fltStkPnl, windowDataGrid, selectedFilter, controlValues, tbOffset, tbSelectorText); }); btnNextPage.Click += new RoutedEventHandler((s, e) => { tbOffset.Text = Convert.ToString(Convert.ToInt32(tbOffset.Text) + Convert.ToInt32(tbFetch.Text)); WindowTasks.WinClearDataFields(winNew, editStkPnl, fltStkPnl, true, windowMetaList, controlValues); }); btnPrevPage.Click += new RoutedEventHandler((s, e) => { if (Convert.ToInt32(tbOffset.Text) >= Convert.ToInt32(tbFetch.Text)) { tbOffset.Text = Convert.ToString(Convert.ToInt32(tbOffset.Text) - Convert.ToInt32(tbFetch.Text)); WindowTasks.WinClearDataFields(winNew, editStkPnl, fltStkPnl, true, windowMetaList, controlValues); } }); //Build up the layout with UI parts //Add the datagrid to the window Grid.SetColumn(dataGrid, 1); Grid.SetRow(dataGrid, 1); Grid.SetRowSpan(dataGrid, 1); mainGrid.Children.Add(dataGrid); //Add combo/text to stack panel fltStkPnl.Children.Add(labelFlt); fltStkPnl.Children.Add(winFlt); //Add Filter selector to main grid Grid.SetColumn(fltGrid, 1); Grid.SetRow(fltGrid, 0); mainGrid.Children.Add(fltGrid); //Add editing controls Stack Panel // editGrid.Children.Add(editStkPnl); Grid.SetColumn(editGrid, 0); Grid.SetRow(editGrid, 1); mainGrid.Children.Add(editGrid); //Add Editing buttons to stack pannel buttonStkPnl.Children.Add(btnSave); buttonStkPnl.Children.Add(btnNew); buttonStkPnl.Children.Add(btnDelete); buttonStkPnl.Children.Add(btnClear); buttonStkPnl.Children.Add(btnExit); //Add buttons to main grid Grid.SetColumn(buttonGrid, 0); Grid.SetColumnSpan(buttonGrid, 1); Grid.SetRow(buttonGrid, 2); mainGrid.Children.Add(buttonGrid); //Add Record selector to main grid Grid.SetColumn(recordSelectorGrid, 1); Grid.SetRow(recordSelectorGrid, 2); recordSelectorStkPnl.Children.Add(tbOffset); recordSelectorStkPnl.Children.Add(btnPrevPage); recordSelectorStkPnl.Children.Add(tbSelectorText); recordSelectorStkPnl.Children.Add(btnNextPage); recordSelectorStkPnl.Children.Add(tbFetch); mainGrid.Children.Add(recordSelectorGrid); //Add Message Area messageStkPnl.Children.Add(tbWinMode); Grid.SetColumn(messageGrid, 0); Grid.SetRow(messageGrid, 3); Grid.SetColumnSpan(messageGrid, 3); mainGrid.Children.Add(messageGrid); //Add Main Grid to window winNew.Content = mainGrid; //Prepare the form with data and set mode winFlt.SelectedIndex = 0; DatabaseDataOps.DbGetDataGridRows(winNew, windowMetaList, editStkPnl, fltStkPnl, windowDataGrid, 0, controlValues, tbOffset, tbSelectorText); WindowTasks.WinSetMode("CLEAR", winNew, btnSave, btnNew, btnDelete, btnExit, btnClear, windowMetaList, tbWinMode); winNew.Show(); }