Почему заголовки таблиц не пусты после их удаления?

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

Описание метода задачи:

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

Когда я использую «Первая попытка» (показать метод «Проблема»), ничего не будет удалено, потому что в моей таблице для DataStream нет столбцов (просматривается с помощью отладчика при втором запуске метода). Но когда я меняю 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");
        }
    }

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

Почему заголовки таблиц не пусты после их удаления?

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

Почему заголовки таблиц не пусты после их удаления?

Обновлено: добавьте дополнительную информацию и вставьте новый метод проблемы.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
72
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

dgTable1.Columns.Clear();

Когда я удаляю столбцы из своей сетки данных, в таблице нет заголовков, и я не могу добавить некоторые столбцы в свою таблицу.

sniffi 29.05.2019 06:59

Разве это не то, что вы хотите? Я думаю, вы автоматически генерируете столбцы?

mm8 31.05.2019 11:39

Привет, проблема в том, что когда я удаляю столбцы внутри сетки данных, я не могу добавить новые столбцы. Моя цель - запустить метод, все столбцы будут удалены внутри этой таблицы, и я смогу создать новые столбцы с новым заголовком. Когда я делаю то, что вы пишете, я не могу создавать новые столбцы.

sniffi 03.06.2019 07:01

Какой? Конечно, вы можете добавлять новые столбцы в dgTable1.Columns независимо от того, сколько раз вы вызывали метод Clear?

mm8 03.06.2019 11:27
Ответ принят как подходящий

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

Вот мой код:

        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");
        }
    }

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

Другие вопросы по теме