【发布时间】:2020-07-30 21:27:22
【问题描述】:
所以我正在使用 wpf .net 框架进行一个学校项目。
我有一个包含以下列的数据库:id、name、date、startTime、endTime、host。
在我的软件中,我想将这些值添加到数据表中。使用 MysqlDataAdapter 并填充数据表。
但现在在添加所有这些值之后,我想以编程方式添加一个名为 TotalTime 的新列,该列的行值为 (endTime - startTime) * 60 以分钟计算总时间。
我认为在数据库中添加此列是多余的,所以我通过代码添加它。
但我面临的问题是,当我填充数据表并尝试将 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);
}
}
以及我添加新行的代码 + 计算从 DB 获取数据的位置
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;
}
}
以及打开DATAGRID按钮所在的xaml
<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>
【问题讨论】: