Я работаю с Visual Studio 2019, C # и WPF. Я пытаюсь удалить мой заголовок таблицы динамически, но у меня есть некоторые проблемы.

Описание метода проблемы:

У меня есть метод, чтобы выбрать имя пакета данных и создать Datatable с ними в качестве заголовков Datatable. Это до сих пор прекрасно работает, проблема заключается в удалении старых заголовков таблицы при втором или третьем запуске. Я протестировал несколько разных способов удаления заголовков, но у меня ничего не получалось.

Когда я использую «Первая попытка» (показать метод «Проблема»), ничего не будет удалено, потому что в моем tableforDataStream нет никаких столбцов (наблюдается с помощью отладчика при запуске второго метода). Но когда я изменяю tableforDataStream на свой DataGrid (dgTable3), у меня там есть 3 столбца, и я не могу добавить новые столбцы в свой tableforDataStream (например, посмотреть последнее изображение левой таблицы).

Вторая и третья попытки почти такие же, как и первая попытка, за исключением того, что я могу проверить, остались ли еще какие-то столбцы. Я уже пробовал tableforDataStream.Reset;, но это не имеет никакого смысла, это то же самое решение, что и «Первая попытка»

Проблемный метод:

private void CreateOverviewTable_Click(object sender, RoutedEventArgs e)
    {
        if (isConnected != 0)
        {
            //tableforDataStream.Columns.Clear();   <--- First try to delete the old tableforDataStream.Header
            if (dgTable3.Columns.Count != 0)
            {
                while(dgTable3.Columns.Count > 0)
                {
                    //tableforDataStream.Columns.RemoveAt(0);   <--- Second try to delete the old tableforDataStream.Header
                    dgTable3.Columns.RemoveAt(0); //<--- Third try to delete the old tableforDataStream.Header
                }
            }

            int anzZeilen = tableSelectedVar.Rows.Count;
            if (anzZeilen != 0)
            {
                dgTable1.Visibility = Visibility.Collapsed;
                dgTable3.Visibility = Visibility.Visible;

                //Create an array for the data packages(VarName, SaveAddress, VarSize)
                string[,] inhaltVar = new string[anzZeilen, 3];

                //Copie all infos from the Variable into the array
                for (int i = 0; i <= anzZeilen - 1; i++)
                {
                    for (int j = 0; j < 3; j++)
                    {
                        inhaltVar[i, j] = tableSelectedVar.Rows[i].ItemArray[j].ToString();
                    }
                }

                //Create for every data package a column inside the tableforDataStream
                for (int k = 0; k <= (inhaltVar.GetLength(0) - 1); k++)
                {
                    try
                    {
                        //insert the VarName as tableforDataStream.Header   
                        tableforDataStream.Columns.Add(inhaltVar[k, 0]);
                    }
                    catch (Exception exc)
                    {
                        MessageBox.Show("The variable was already send to machine");
                    }
                }
                //send Data over UDP to the machine
                if (isConnected == 1)
                {
                    SendDataToMachine(inhaltVar);
                }
                else
                {
                    MessageBox.Show("Please start first the connection");
                }
            }
            else
            {
                MessageBox.Show("Please insert minimum one Variable for overwatch", null, MessageBoxButton.OK, MessageBoxImage.Information);
            }
        }
        else
        {
            MessageBox.Show("Please start the conection to machine");
        }
    }

На этом рисунке показан результат «первой попытки» при втором запуске метода, красные стрелки должны быть удалены, а зеленые стрелки должны быть там.

enter image description here

Это мой графический интерфейс, когда я удаляю свою DataGrid (dgTable3), как в фактическом «методе проблемы»

enter image description here

РЕДАКТИРОВАТЬ: Добавить дополнительную информацию и вставить новый метод проблемы.

0
sniffi 28 Май 2019 в 16:25

2 ответа

Лучший ответ

Я не знаю, почему я не могу удалить заголовки, мне сначала это нравится, но у меня есть обходной путь, если у кого-то есть такая же проблема.

Вот мой код:

        private void CreateOverviewTable_Click(object sender, RoutedEventArgs e)
    {
        if (isConnected != 0)
        {
            int anzNeueVar = tableSelectedVar.Rows.Count;
            //Überprüft ob eine Variable zur Überwachung ausgewählt wurde
            if (anzNeueVar != 0)
            {
                //Macht das dgTable1 unsichtbar und macht dgTable3 an der Stelle von dgTable1 sichtbar
                dgTable1.Visibility = Visibility.Collapsed;
                dgTable3.Visibility = Visibility.Visible;

                //Erstellt ein Array welcher in der ersten Splate den Namen hat, in der zweiten die Adresse und in der dritten die Datengröße.
                string[,] inhaltVar = new string[anzNeueVar, 3];
                //Liest die Daten aus der Tabelle in den Array
                for (int i = 0; i <= anzNeueVar - 1; i++)
                {
                    for (int j = 0; j < 3; j++)
                    {
                        inhaltVar[i, j] = tableSelectedVar.Rows[i].ItemArray[j].ToString();
                    }
                }
                string[,] altInhaltVar = new string[anzNeueVar, 3];
                altInhaltVar = inhaltVar;
                int anzAlteVar = dgTable3.Columns.Count;
                //Erstellt eine Spalte für jeden Parameter welcher überwacht werden soll.
                for (int k = 0; k <= (inhaltVar.GetLength(0) - 1); k++)
                {
                    //erster Durchlauf
                    if (anzAlteVar == 0)
                    {
                        try
                        {
                            //Erstellt die Columns für jeden Parameter
                            //dgTable3.Columns.Add(inhaltVar[k, 0]);
                            tableforDataStream.Columns.Add(inhaltVar[k, 0]);
                        }
                        catch (Exception exc)
                        {
                            MessageBox.Show(exc.Message);
                        }
                    }
                    //min zweiter Durchlauf
                    else
                    {
                        //wenn zuviele Spalten vorhanden sind werden die übrigen gelöscht
                        if (anzAlteVar > anzNeueVar)
                        {
                            while (dgTable3.Columns.Count() != inhaltVar.GetLength(0))
                            {
                                dgTable3.Columns.RemoveAt(0);
                            }
                        }
                        //wenn zu wenig Spalten vorhanden sind werden neue hinzugefügt 
                        if (anzAlteVar < anzNeueVar)
                        {
                            int zahler = 1;
                            string szahler;

                            for (int j = 0; j <= dgTable3.Columns.Count - 1; j++)
                            {
                                szahler = zahler.ToString();
                                dgTable3.Columns[j].Header = szahler;
                                zahler++;
                            }
                            while (dgTable3.Columns.Count() != anzNeueVar)
                            {
                                szahler = zahler.ToString();
                                DataGridTextColumn textColumn = new DataGridTextColumn { Header = szahler};

                                dgTable3.Columns.Add(textColumn);
                                zahler++;
                            }
                        }
                        //übernimmt die neuen Header in das Datagrid
                        for (int i = 0; i <= dgTable3.Columns.Count-1; i++)
                        {
                            dgTable3.Columns[i].Header = inhaltVar[i, 0];
                        }
                    }
                }
                //Schickt die Daten welche in Tabelle tableSelectedVar sind zur Maschine
                if (isConnected == 1)
                {
                    SendDataToMachine(inhaltVar);
                }
                else
                {
                    MessageBox.Show("Bitte erste die Verbindung herstellen bevor Daten an die Maschine geschickt werden");
                }

                //TestFunktion: Sendet was auch immer im Suchtextfeld steht
                //TestSend();
            }
            else
            {
                MessageBox.Show("Bitte mindestens eine Variable zur Ueberwachung bestimmen", null, MessageBoxButton.OK, MessageBoxImage.Information);
            }
        }
        else
        {
            MessageBox.Show("Bitte erst eine Verbindung zur Maschine Herstellen");
        }
    }

Я надеюсь, что кто-то может использовать это в качестве обходного пути, для меня это работает идеальный дружественные пожелания сниффи.

0
sniffi 13 Июн 2019 в 07:25

Вы должны очистить столбцы от DataGrid или GridView:

dgTable1.Columns.Clear();
0
mm8 28 Май 2019 в 13:56