Я работаю с 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");
}
}
На этом рисунке показан результат «первой попытки» при втором запуске метода, красные стрелки должны быть удалены, а зеленые стрелки должны быть там.
Это мой графический интерфейс, когда я удаляю свою DataGrid (dgTable3), как в фактическом «методе проблемы»
РЕДАКТИРОВАТЬ: Добавить дополнительную информацию и вставить новый метод проблемы.
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");
}
}
Я надеюсь, что кто-то может использовать это в качестве обходного пути, для меня это работает идеальный дружественные пожелания сниффи.
Вы должны очистить столбцы от DataGrid
или GridView
:
dgTable1.Columns.Clear();
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.