Итак, я работаю над школьным проектом, используя структуру wpf .net.
У меня есть БД со столбцом: идентификатор, имя, дата, время начала, время окончания, хост.
И в моем программном обеспечении я хочу добавить эти значения в таблицу данных. который работал с использованием MysqlDataAdapter и заполнением таблицы данных.
но теперь, после добавления всех этих значений, я хочу программно добавить новый столбец с именем TotalTime, значения строки этого столбца (endTime — startTime) * 60 для расчета totalTime в минутах.
Я считаю излишним добавлять этот столбец в БД, поэтому я добавил его по коду.
Но проблема, с которой я сталкиваюсь, заключается в том, что когда я заполнил таблицу данных и попытался добавить NewRow в столбец, строки добавят ее в новую строку, а не добавят в первую строку заполненных данных.
Как я могу добавить NewRow в эту сетку данных в строке 1 вместо создания новых пустых строк, таких как изображения.
Заранее спасибо!
Код для заполнения datatable:
public void GetProgrammaOverzicht(int zenderId)
{
try
{
Programmas.programmaDataTable.Clear();
var query = $"SELECT naam, datum, begin_tijd, eind_tijd, presentator FROM programmas WHERE zenderId={zenderId}";
ConnectionVariables.conn.Open();
using (MySqlCommand cmdSel = new MySqlCommand(query, ConnectionVariables.conn))
{
MySqlDataAdapter da = new MySqlDataAdapter(cmdSel);
da.Fill(Programmas.programmaDataTable);
}
ConnectionVariables.conn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
Console.WriteLine(ex.Message);
}
}
И код, где я добавляю новую строку + вычисляю получение данных из БД
public void CalculateTotalTime(int zenderId)
{
try
{
Programmas.beginTijd.Clear();
Programmas.eindTijd.Clear();
var query = $"SELECT begin_tijd, eind_tijd FROM programmas WHERE zenderId={zenderId}";
var cmd = new MySqlCommand(query, ConnectionVariables.conn);
ConnectionVariables.conn.Open();
var queryresult = cmd.ExecuteReader();
if (queryresult.HasRows)
{
while (queryresult.Read())
{
Programmas.beginTijd.Add(queryresult.GetString(0));
Programmas.eindTijd.Add(queryresult.GetString(1));
}
}
else
{
MessageBox.Show("Kan duur in minuten niet berekenen");
}
queryresult.Close();
ConnectionVariables.conn.Close();
}
catch (Exception ex)
{
ConnectionVariables.conn.Close();
MessageBox.Show(ex.Message);
Console.WriteLine(ex.Message);
}
}
private void OpenProgrammaOverzichtBtn(object sender, RoutedEventArgs e)
{
int currentZenderId;
string currentZender;
currentZender = this.Name.Remove(0, 6);
currentZenderId = Int32.Parse(currentZender);
ProgrammaOverzichtDialog.IsOpen = true;
zenderClass.GetProgrammaOverzicht(currentZenderId);
zenderClass.CalculateTotalTime(currentZenderId);
if (Programmas.programmaDataTable.Columns.Contains("Duur in minuten"))
{
Console.WriteLine("Column duur in minuten bestaat al");
}
else
{
DataColumn column = new DataColumn();
column.ColumnName = "Duur in minuten";
Programmas.programmaDataTable.Columns.Add(column);
}
DataRow row;
for (int i = 0; i < Programmas.beginTijd.Count; i++)
{
string eind = Programmas.eindTijd[i];
int eindTijd = int.Parse(eind.Remove(2, 3));
string begin = Programmas.beginTijd[i];
int beginTijd = int.Parse(begin.Remove(2, 3));
int totaal = (eindTijd - beginTijd) * 60;
row = Programmas.programmaDataTable.NewRow();
row["Duur in minuten"] = totaal;
Programmas.programmaDataTable.Rows.InsertAt(row, i);
}
programmaOverzichtGrid.DataContext = Programmas.programmaDataTable;
}
}
И xaml, где находится кнопка для открытия DATAGRID
<materialDesign:DialogHost Name="ProgrammaOverzichtDialog" Background="#FF3F3F46">
<materialDesign:DialogHost.DialogContent >
<StackPanel>
<DataGrid x:Name="programmaOverzichtGrid" AutoGenerateColumns="True" ItemsSource="{Binding}"/>
</StackPanel>
</materialDesign:DialogHost.DialogContent>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<Button FontSize="20px" Foreground="White" Content="programmaoverzicht" Click="OpenProgrammaOverzichtBtn" x:Name="programmaOverzichtBtn"/>
</StackPanel>
</materialDesign:DialogHost>
Оке, мой знакомый программист дал мне возможность попробовать, и это сработало!
Ответ: В моем методе «OpenProgrammaOverzichtBtn» мне нужно было перейти от
To: