Итак, я работаю над школьным проектом с использованием wpf. net framework.
У меня есть БД, в которой есть столбец: id, имя, дата, startTime, endTime, host.
И в моем программном обеспечении я хочу добавить эти значения в Datatable. это работало с использованием MysqlDataAdapter и заполняя dataTable.
, но теперь, после того, как все эти значения добавлены, я хочу программно добавить новый столбец с именем TotalTime, значения строк этого столбца (endTime - startTime) * 60 для вычисления totalTime в минутах.
Я считаю излишним добавлять этот столбец в БД, поэтому я добавил его по коду.
Но проблема, с которой я сталкиваюсь, заключается в том, что я заполнил попробуйте добавить NewRow в столбец, строки добавят его в новую строку вместо того, чтобы добавить его в первую строку заполненных данных.
Как я могу добавить NewRow к этой сетке данных в строке 1 вместо создания новых пустых строк, таких как изображения.
Заранее спасибо!
Код для заполнения таблицы данных:
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>