c# - WPF将新行添加到数据库中的填充数据表
问题描述
所以我正在使用 wpf .net 框架进行学校项目。
我有一个包含列的数据库:id、name、date、startTime、endTime、host。
在我的软件中,我想将这些值添加到数据表中。使用 MysqlDataAdapter 并填充数据表。
但是现在在添加了所有这些值之后,我想以编程方式添加一个名为 TotalTime 的新列,该列的行值为 (endTime - startTime) * 60 以分钟为单位计算总时间。
我认为在数据库中添加此列是多余的,所以这就是我通过代码添加它的原因。
但是我面临的问题是,当我填充数据表并尝试将 NewRow 添加到列中时,行会将其添加到新行中,而不是将其添加到填充数据的第一行中。
如何在第 1 行将 NewRow 添加到此数据网格,而不是像图像一样创建新的空行。
先感谢您!
填充数据表的代码:
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”中,我需要从
row = Programmas.programmaDataTable.NewRow();
row["Duur in minuten"] = totaal;
Programmas.programmaDataTable.Rows.InsertAt(row, i);
至:
row = Programmas.programmaDataTable.Rows[i];
row["Duur in minuten"] = totaal;
//Programmas.programmaDataTable.Rows.InsertAt(row, i);
推荐阅读
- html - 失去对应用程序中许多元素(如过滤器)的关注
- python - 文件重命名添加后缀
- r - R CMD 构建临时目录位置
- javascript - mat-select 日期(日-月-年)选择?
- ruby-on-rails - 如何将字符串对象转换为 ruby on rails 中的数组?
- c# - 如何在 Newtonsoft Json C# 中反序列化数组数组?
- java-8 - 如何使用 lambdas 表达式从嵌套 Maps 中提取值?
- nuxt.js - 静态路由中的 NuxtJS index.php 不起作用
- java - 使用正则表达式 [Java] 按域对电子邮件登录数据进行分组
- python - 在熊猫数据框中展平嵌套 JSON 数据的最简单方法是什么?