private void CboAuswahl_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            ComboBox         cbo     = (ComboBox)sender;
            LookupAuswahlDMS auswahl = (LookupAuswahlDMS)cbo.Tag;

            auswahl.selectionChangedEventArgs = e;
            string _TabellenFeldBezogeneTabelle       = "";
            string _TabellenFeldBezogeneTabelleString = "";
            string xxx = "";


            string FeldnameDesLookupFeldes = cbo.Name;
            //_feld hat immer die Form _x_Feldname_Reftabelle_FeldInRefTabelle
            string refTabelle      = FeldnameDesLookupFeldes.Split('_')[3];
            string WhereClauseFeld = "";

            if ((ComboBoxItem)cbo.SelectedItem != null)
            {
                int IdFuerWhereClause = Int32.Parse(((ComboBoxItem)cbo.SelectedItem).Tag.ToString());

                int counter = 0;
                foreach (string item in auswahl.StammdatenCsvFeldnamen)
                {
                    foreach (var fn in item.Split(';'))
                    {
                        if (fn.Length > 2 && fn.Substring(0, 3).Equals("_x_"))
                        {
                            if (fn.Split('_')[3].Equals(refTabelle))
                            {
                                foreach (var csv in auswahl.StammdatenCsvFeldnamen.ElementAt(counter).Split(';'))
                                {
                                    if (csv.Contains("_x_") && csv.Contains(refTabelle))
                                    {
                                        xxx = csv;
                                        _TabellenFeldBezogeneTabelle = auswahl.StammdatenTabelle.ElementAt(counter);

                                        //Leider muss man das Feld Bezeichncung nennen, keine Ahnung, wie es anders gehen könnte. Woher weiss ich, welches Feld im Lookup eigentlich in der COmbobox steht???
                                        //Wie man es dreht, bei dem Datenodell MUSS ich wohl dabei bleiben, dass Lookupfelder nur auf das Feld Bezeichnung gelegt werden können.
                                        //Dieselben Probleme hatten wohl mal die Sharepoint-Entwickler, deswegen gibts den Title...
                                        _TabellenFeldBezogeneTabelleString = "___" + auswahl.StammdatenTabelle.ElementAt(counter) + "_Bezeichnung";
                                        WhereClauseFeld = fn;
                                    }
                                }
                            }
                        }
                    }

                    counter++;
                }

                //Wir haben jetzt das Feld, die WhereCLause und die Id, nun noch rausfinden, welche COmbobox neu zu zeichnen ist
                foreach (var child in grdMain.Children)
                {
                    if (child.GetType() == typeof(LookupAuswahl) && !WhereClauseFeld.Equals(""))
                    {
                        if (((LookupAuswahl)child).Tag.ToString().Equals(_TabellenFeldBezogeneTabelle))
                        {
                            //cbi ist falsch, ich brauche das Item aus der COmboBOx, die dann geändert wird!!!
                            ComboBoxItem cbi = (ComboBoxItem)((LookupAuswahl)child).cboAuswahl.SelectedItem;
                            if (cbi == null)
                            {
                                ((LookupAuswahlDMS)child).Fill(_TabellenFeldBezogeneTabelleString, IdFuerWhereClause, WhereClauseFeld);
                            }
                            else
                            {
                                ((LookupAuswahlDMS)child).Fill(_TabellenFeldBezogeneTabelleString, IdFuerWhereClause, WhereClauseFeld, cbi);
                            }
                        }
                    }
                }
            }
        }
        public void zeichneGrid(string tabName, string csvTabFeldnamen, string csvTabFeldtypen)
        {
            _tabName         = tabName;
            _csvTabFeldnamen = csvTabFeldnamen;
            _csvTabFeldtypen = csvTabFeldtypen;
            _csvTabFeldwerte = "";

            string[] csvFeldnamen = new string[] { };
            string[] csvFeldtypen = new string[] { };

            if (!_csvTabFeldnamen.Equals(""))
            {
                csvFeldnamen = _csvTabFeldnamen.Split(';');
                csvFeldtypen = _csvTabFeldtypen.Split(';');
            }

            this.grdMain.Children.Clear();
            this.grdMain.RowDefinitions.Clear();
            this.grdMain.ColumnDefinitions.Clear();
            //Überschrift generieren
            TextBlock txtBlock1 = new TextBlock();

            txtBlock1.FontSize          = 14;
            txtBlock1.FontWeight        = FontWeights.Bold;
            txtBlock1.Text              = Dateiname;
            txtBlock1.Margin            = new Thickness(5, 0, 0, 0);
            txtBlock1.Foreground        = new SolidColorBrush(Colors.Black);
            txtBlock1.VerticalAlignment = VerticalAlignment.Top;

            //Überschrift setzen
            RowDefinition gridRow = new RowDefinition();

            gridRow.Height = new GridLength(30);
            grdMain.RowDefinitions.Add(gridRow);
            Grid.SetRow(txtBlock1, 0);
            grdMain.Children.Add(txtBlock1);

            ColumnDefinition cL1 = new ColumnDefinition();

            cL1.Width = new GridLength(150);
            grdMain.ColumnDefinitions.Add(cL1);
            ColumnDefinition cR1 = new ColumnDefinition();

            cR1.Width = new GridLength(350);
            Grid.SetColumnSpan(txtBlock1, 2);
            grdMain.ColumnDefinitions.Add(cR1);


            if (!csvFeldnamen.ElementAt(0).Equals(""))
            {
                for (int i = 0; i < csvFeldnamen.Length; i++)
                {
                    ColumnDefinition cL = new ColumnDefinition();
                    cL.Width = new GridLength(150);
                    grdMain.ColumnDefinitions.Add(cL);
                    ColumnDefinition cR = new ColumnDefinition();
                    cR.Width = new GridLength(350);
                    grdMain.ColumnDefinitions.Add(cR);

                    RowDefinition gR = new RowDefinition();
                    gR.Height = new GridLength(30);
                    grdMain.RowDefinitions.Add(gR);

                    TextBlock tbLabel = new TextBlock();

                    tbLabel.Text = (csvFeldnamen.ElementAt(i).Length > 2 && csvFeldnamen.ElementAt(i).Substring(0, 3).Equals("_x_") ? csvFeldnamen.ElementAt(i).Split('_')[2] : csvFeldnamen.ElementAt(i)) + " (" + csvFeldtypen.ElementAt(i).Substring(0, 3) + ")";

                    tbLabel.Tag                 = csvFeldnamen.ElementAt(i);
                    tbLabel.Width               = 150;
                    tbLabel.Height              = 30;
                    tbLabel.Margin              = new Thickness(5, 0, 0, 0);
                    tbLabel.Foreground          = new SolidColorBrush(Colors.Black);
                    tbLabel.VerticalAlignment   = VerticalAlignment.Top;
                    tbLabel.HorizontalAlignment = HorizontalAlignment.Left;
                    Grid.SetColumn(tbLabel, 0);
                    Grid.SetRow(tbLabel, (i + 1));
                    grdMain.Children.Add(tbLabel);

                    if (csvFeldtypen[i].Substring(0, 3).Equals("bol"))
                    {
                        CheckBox tb = new CheckBox();
                        tb.Name                = "Wert" + i;
                        tb.Width               = 20;
                        tb.Height              = 20;
                        tb.VerticalAlignment   = VerticalAlignment.Top;
                        tb.HorizontalAlignment = HorizontalAlignment.Left;
                        Grid.SetColumn(tb, 1);
                        Grid.SetRow(tb, (i + 1));
                        grdMain.Children.Add(tb);
                    }
                    else if (csvFeldtypen[i].Substring(0, 3).Equals("loo"))
                    {
                        LookupAuswahlDMS tb = new LookupAuswahlDMS(_tabName, _csvTabFeldnamen, _csvTabFeldnamen);
                        tb.Tag                          = csvFeldnamen.ElementAt(i).Split('_')[3];
                        tb.cboAuswahl.Tag               = tb;
                        tb.cboAuswahl.Name              = csvFeldnamen.ElementAt(i);
                        tb.cboAuswahl.SelectionChanged += CboAuswahl_SelectionChanged;
                        tb.Fill(csvFeldnamen.ElementAt(i));
                        tb.VerticalAlignment   = VerticalAlignment.Top;
                        tb.HorizontalAlignment = HorizontalAlignment.Left;
                        Grid.SetColumn(tb, 1);
                        Grid.SetRow(tb, (i + 1));
                        grdMain.Children.Add(tb);
                    }
                    else
                    {
                        TextBox tb = new TextBox();
                        tb.Name     = "Wert" + i;
                        tb.MinWidth = 250;
                        tb.MaxWidth = 250;
                        tb.Height   = 20;
                        //Datepicker falls benötigt
                        DatePicker dp = new DatePicker();
                        dp.Name   = "Wert" + i;
                        dp.Width  = 200;
                        dp.Height = 25;
                        //Verschiedene Eventhandler für die Feldtypen setzen
                        if (csvFeldtypen[i].Substring(0, 3).Equals("dat"))
                        {
                            //Wenn es sich um ein Datum handelt, muss ein Datepicker hinzugefügt werden
                            dp.VerticalAlignment   = VerticalAlignment.Top;
                            dp.HorizontalAlignment = HorizontalAlignment.Left;
                            Grid.SetColumn(dp, 1);
                            Grid.SetRow(dp, (i + 1));
                            grdMain.Children.Add(dp);
                        }
                        else
                        {
                            if (csvFeldtypen[i].Substring(0, 3).Equals("dec"))
                            {
                                tb.TextChanged += Tb_TextChangedDec;
                            }
                            else if (csvFeldtypen[i].Substring(0, 3).Equals("int"))
                            {
                                tb.TextChanged += Tb_TextChangedInt;
                            }
                            else if (csvFeldtypen[i].Substring(0, 3).Equals("txt"))
                            {
                                if (csvFeldtypen[i].Equals("txt50n"))
                                {
                                    tb.TextChanged += Tb_TextChangedTxt50;
                                }
                                if (csvFeldtypen[i].Equals("txt255n"))
                                {
                                    tb.TextChanged += Tb_TextChangedTxt255;
                                    tb.TextWrapping = TextWrapping.Wrap;
                                    tb.Height       = 75;
                                    grdMain.RowDefinitions[i + 1].Height = new GridLength(80);
                                }
                                if (csvFeldtypen[i].Equals("txtmn"))
                                {
                                    tb.TextChanged += Tb_TextChangedTxtm;
                                    tb.TextWrapping = TextWrapping.Wrap;
                                    tb.Height       = 115;
                                    grdMain.RowDefinitions[i + 1].Height = new GridLength(120);
                                }
                            }

                            tb.VerticalAlignment   = VerticalAlignment.Top;
                            tb.HorizontalAlignment = HorizontalAlignment.Left;
                            Grid.SetColumn(tb, 1);
                            Grid.SetRow(tb, (i + 1));
                            grdMain.Children.Add(tb);
                        }
                    }
                }
            }
        }
        public void zeichneGrid(string tabName, string csvTabFeldnamen, string csvTabFeldtypen, string csvTabFeldwerte)
        {
            //btnSpeichern.Content = "Sichern";
            _tabName         = tabName;
            _csvTabFeldnamen = csvTabFeldnamen;
            _csvTabFeldtypen = csvTabFeldtypen;
            _csvTabFeldwerte = csvTabFeldwerte;

            var csvFeldnamen = csvTabFeldnamen.Split(';');
            var csvFeldtypen = csvTabFeldtypen.Split(';');
            var csvFeldwerte = csvTabFeldwerte.Split(';');

            this.grdMain.Children.Clear();
            this.grdMain.RowDefinitions.Clear();
            this.grdMain.ColumnDefinitions.Clear();
            //Überschrift generieren
            TextBlock txtBlock1 = new TextBlock();

            txtBlock1.FontSize          = 14;
            txtBlock1.FontWeight        = FontWeights.Bold;
            txtBlock1.Text              = Dateiname;
            txtBlock1.Margin            = new Thickness(5, 0, 0, 0);
            txtBlock1.Foreground        = new SolidColorBrush(Colors.Black);
            txtBlock1.VerticalAlignment = VerticalAlignment.Top;

            //Überschrift setzen
            RowDefinition gridRow = new RowDefinition();

            gridRow.Height = new GridLength(30);
            grdMain.RowDefinitions.Add(gridRow);
            Grid.SetRow(txtBlock1, 0);
            grdMain.Children.Add(txtBlock1);

            ColumnDefinition cL1 = new ColumnDefinition();

            cL1.Width = new GridLength(150);
            grdMain.ColumnDefinitions.Add(cL1);
            ColumnDefinition cR1 = new ColumnDefinition();

            cR1.Width = new GridLength(350);
            Grid.SetColumnSpan(txtBlock1, 2);
            grdMain.ColumnDefinitions.Add(cR1);

            for (int i = 0; i < csvFeldnamen.Length; i++)
            {
                ColumnDefinition cL = new ColumnDefinition();
                cL.Width = new GridLength(150);
                grdMain.ColumnDefinitions.Add(cL);
                ColumnDefinition cR = new ColumnDefinition();
                cR.Width = new GridLength(350);
                grdMain.ColumnDefinitions.Add(cR);

                RowDefinition gR = new RowDefinition();
                gR.Height = new GridLength(30);
                grdMain.RowDefinitions.Add(gR);

                TextBlock tbLabel = new TextBlock();
                tbLabel.Text                = (csvFeldnamen.ElementAt(i).Length > 2 && csvFeldnamen.ElementAt(i).Substring(0, 3).Equals("_x_") ? csvFeldnamen.ElementAt(i).Split('_')[2] : csvFeldnamen.ElementAt(i)) + " (" + csvFeldtypen.ElementAt(i).Substring(0, 3) + ")";
                tbLabel.Tag                 = csvFeldnamen.ElementAt(i);
                tbLabel.Width               = 150;
                tbLabel.Height              = 30;
                tbLabel.Margin              = new Thickness(5, 0, 0, 0);
                tbLabel.Foreground          = new SolidColorBrush(Colors.Black);
                tbLabel.VerticalAlignment   = VerticalAlignment.Top;
                tbLabel.HorizontalAlignment = HorizontalAlignment.Left;
                Grid.SetColumn(tbLabel, 0);
                Grid.SetRow(tbLabel, (i + 1));
                grdMain.Children.Add(tbLabel);
                if (csvFeldtypen[i].Substring(0, 3).Equals("bol"))
                {
                    CheckBox tb = new CheckBox();
                    tb.Name   = "Wert" + i;
                    tb.Width  = 20;
                    tb.Height = 20;
                    var test = csvFeldwerte.ElementAt(i).ToString();
                    tb.IsChecked           = csvFeldwerte.ElementAt(i).ToString().Equals("True");
                    tb.VerticalAlignment   = VerticalAlignment.Top;
                    tb.HorizontalAlignment = HorizontalAlignment.Left;
                    Grid.SetColumn(tb, 1);
                    Grid.SetRow(tb, (i + 1));
                    grdMain.Children.Add(tb);
                }
                else if (csvFeldtypen[i].Substring(0, 3).Equals("loo"))
                {
                    LookupAuswahlDMS tb = new LookupAuswahlDMS(_tabName, _csvTabFeldnamen, _csvTabFeldtypen);
                    tb.Tag                          = csvFeldnamen.ElementAt(i).Split('_')[3];
                    tb.cboAuswahl.Tag               = tb;
                    tb.cboAuswahl.Name              = csvFeldnamen.ElementAt(i);
                    tb.cboAuswahl.SelectionChanged += CboAuswahl_SelectionChanged;
                    tb.Fill(csvFeldnamen.ElementAt(i));
                    Tuple <List <int>, List <object> > tuple = ((DbConnector)App.Current.Properties["Connector"]).ReadComboboxItems(csvFeldnamen.ElementAt(i).Split('_')[3], csvFeldnamen.ElementAt(i).Split('_')[4]);
                    if (!csvFeldwerte.ElementAt(i).ToString().Equals(""))
                    {
                        //Im Tuple sind die Bezeichnungen, ich brauch hier die id

                        //int position = tuple.Item1.IndexOf(Int32.Parse(csvFeldwerte.ElementAt(i).ToString()));
                        int position = tuple.Item2.IndexOf(csvFeldwerte.ElementAt(i).ToString());
                        tb.cboAuswahl.SelectedIndex = position;
                    }

                    tb.VerticalAlignment   = VerticalAlignment.Top;
                    tb.HorizontalAlignment = HorizontalAlignment.Left;
                    Grid.SetColumn(tb, 1);
                    Grid.SetRow(tb, (i + 1));
                    grdMain.Children.Add(tb);
                }
                else
                {
                    //Textbox erstellen
                    TextBox tb = new TextBox();
                    tb.Name     = "Wert" + i;
                    tb.Width    = 250;
                    tb.MaxWidth = 250;
                    tb.Height   = 20;

                    //Datepicker falls benötigt
                    DatePicker dp = new DatePicker();
                    dp.Name   = "Wert" + i;
                    dp.Width  = 200;
                    dp.Height = 25;

                    //Verschiedene Eventhandler für die Feldtypen setzen
                    if (csvFeldtypen[i].Substring(0, 3).Equals("dat"))
                    {
                        //Hat sich erledigt, ist jetzt Datepicker
                        //tb.TextChanged += Tb_TextChangedDat;
                        //tb.MaxLength = 10;
                    }
                    else if (csvFeldtypen[i].Substring(0, 3).Equals("dec"))
                    {
                        tb.TextChanged += Tb_TextChangedDec;
                    }
                    else if (csvFeldtypen[i].Substring(0, 3).Equals("int"))
                    {
                        tb.TextChanged += Tb_TextChangedInt;
                    }
                    else if (csvFeldtypen[i].Substring(0, 3).Equals("txt"))
                    {
                        if (csvFeldtypen[i].Equals("txt50n"))
                        {
                            tb.TextChanged += Tb_TextChangedTxt50;
                        }
                        if (csvFeldtypen[i].Equals("txt255n"))
                        {
                            tb.TextChanged += Tb_TextChangedTxt255;
                            tb.TextWrapping = TextWrapping.Wrap;
                            tb.Height       = 75;
                            grdMain.RowDefinitions[i + 1].Height = new GridLength(80);
                        }
                        if (csvFeldtypen[i].Equals("txtmn"))
                        {
                            tb.TextChanged += Tb_TextChangedTxtm;
                            tb.TextWrapping = TextWrapping.Wrap;
                            tb.Height       = 115;
                            grdMain.RowDefinitions[i + 1].Height = new GridLength(120);
                        }
                    }
                    if (csvFeldtypen[i].Substring(0, 3).Equals("dat"))
                    {
                        if (csvFeldwerte.ElementAt(i).ToString().Length > 10)
                        {
                            int tag   = Int32.Parse(csvFeldwerte.ElementAt(i).ToString().Substring(0, 2));
                            int monat = Int32.Parse(csvFeldwerte.ElementAt(i).ToString().Substring(3, 2));
                            int jahr  = Int32.Parse(csvFeldwerte.ElementAt(i).ToString().Substring(6, 4));
                            dp.SelectedDate = new DateTime(jahr, monat, tag);
                        }
                        dp.VerticalAlignment   = VerticalAlignment.Top;
                        dp.HorizontalAlignment = HorizontalAlignment.Left;
                        Grid.SetColumn(dp, 1);
                        Grid.SetRow(dp, (i + 1));
                        grdMain.Children.Add(dp);
                    }
                    else
                    {
                        tb.Text = csvFeldwerte.ElementAt(i).ToString();
                        tb.VerticalAlignment   = VerticalAlignment.Top;
                        tb.HorizontalAlignment = HorizontalAlignment.Left;
                        Grid.SetColumn(tb, 1);
                        Grid.SetRow(tb, (i + 1));
                        grdMain.Children.Add(tb);
                    }
                }
            }
        }