using HospitalServerManager.InterfacesAndEnums; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices.WindowsRuntime; using Windows.Foundation; using Windows.Foundation.Collections; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; using Windows.UI.Xaml.Data; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Navigation; //Szablon elementu Okno dialogowe zawartości jest udokumentowany na stronie https://go.microsoft.com/fwlink/?LinkId=234238 namespace HospitalServerManager.View { public sealed partial class NewRecordDialog : ContentDialog { private Dictionary textBlocksDictionary = new Dictionary(); private Dictionary dataControlsDictionary = new Dictionary(); private Dictionary enumTypes; private TextBlock AlertText = new TextBlock(); private IEnumerable neededValues; public List ValuesOfNewObject { get; private set; } public NewRecordDialog(IEnumerable namesOfColumn, IDictionary typesOfColumn, IDictionary enumTypes) { this.InitializeComponent(); this.neededValues = namesOfColumn; ValuesOfNewObject = new List(); this.enumTypes = enumTypes as Dictionary; CreateInterface(namesOfColumn, typesOfColumn); } private void CreateInterface(IEnumerable namesOfColumn, IDictionary typesOfColumn) { grid.ColumnDefinitions.Add(new ColumnDefinition()); grid.ColumnDefinitions.Add(new ColumnDefinition()); grid.ColumnDefinitions.Add(new ColumnDefinition()); grid.RowSpacing = 10D; grid.ColumnSpacing = 10D; List namesList = namesOfColumn.ToList(); // List typesList = typesOfColumn.ToList(); foreach (string value in namesList) { int rowIndex = namesList.FindIndex(x => x == value); Control control = new TextBox(); TextBlock descriptionTextBlock = new TextBlock(); descriptionTextBlock.HorizontalAlignment = HorizontalAlignment.Center; descriptionTextBlock.VerticalAlignment = VerticalAlignment.Center; descriptionTextBlock.HorizontalTextAlignment = TextAlignment.Center; Grid.SetColumn(descriptionTextBlock, 2); descriptionTextBlock.TextWrapping = TextWrapping.Wrap; descriptionTextBlock.FontSize = 12; grid.Children.Add(descriptionTextBlock); Grid.SetRow(descriptionTextBlock, rowIndex); // TODO: Dopisac pozostałe wyjatki dla pozostalych widokow if (typesOfColumn[rowIndex].ToLower() == "date") descriptionTextBlock.Text = "Format: RRRR-MM-DD"; else if (value == "PESEL") descriptionTextBlock.Text = "Format: 11 cyfr"; else if (enumTypes.Keys.ToList().Contains(value)) // TODO: Dodac pozostale kolumny z enum { ComboBox cBox = new ComboBox(); Type type = enumTypes[value]; List list = new List(Enum.GetNames(enumTypes[value]).ToList()); List descriptionsList = new List(); foreach (string x in list) { var enumX = Enum.Parse(type, x); descriptionsList.Add((enumX as Enum).GetEnumDescription()); } cBox.ItemsSource = descriptionsList; cBox.SelectedIndex = 0; control = cBox; descriptionTextBlock.Text = "Brak dodatkowych warunków"; } else descriptionTextBlock.Text = "Brak dodatkowych warunków"; grid.RowDefinitions.Add(new RowDefinition()); TextBlock newTextBlock = new TextBlock(); // TextBox newTextBox = new TextBox(); grid.Children.Add(newTextBlock); grid.Children.Add(control); Grid.SetColumn(control, 1); newTextBlock.Width = control.Width = 140; newTextBlock.Text = value; Grid.SetRow(control, rowIndex); Grid.SetRow(newTextBlock, rowIndex); textBlocksDictionary.Add(rowIndex, newTextBlock); dataControlsDictionary.Add(rowIndex, control); } grid.Children.Add(AlertText); grid.RowDefinitions.Add(new RowDefinition()); Grid.SetRow(AlertText, grid.RowDefinitions.Count - 1); Grid.SetColumnSpan(AlertText, 3); } private bool CheckDialogIsFilled() { bool response = true; foreach (Control control in dataControlsDictionary.Values) { if (control is TextBox) { if (string.IsNullOrEmpty((control as TextBox).Text)) { response = false; break; } } } if (textBlocksDictionary[0].Text == "PESEL") { TextBox textBoxToCheck = (dataControlsDictionary[0] as TextBox); int peselLength = textBoxToCheck.Text.Length; if (peselLength != 11) { response = false; textBoxToCheck.Text = string.Empty; } } return response; } private void StoreData() { foreach (Control control in dataControlsDictionary.Values) { if (control is TextBox) ValuesOfNewObject.Add((control as TextBox).Text); else ValuesOfNewObject.Add((control as ComboBox).SelectedItem as string); } } private void ContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) { bool isFilled = CheckDialogIsFilled(); if (isFilled) StoreData(); else AlertText.Text = "Wypełnij brakujące pola lub sprawdź poprawność danych!"; args.Cancel = !isFilled; } private void ContentDialog_SecondaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) { } } }