将子窗体中的datagridview保存到C#中的SQL数据库中
本文关键字:中的 SQL 数据库 datagridview 窗体 保存 | 更新日期: 2023-09-27 18:19:34
在C#中,我有一个名为"Details"的表单,它显示一个带有票证编号和"done"列(以及我不想保存的其他信息)的数据网格视图。
例如:
Ticket Number | Done
_______________|________
252014 | v
252018 |
252024 | v
252029 | v
用户必须选中或取消选中带有复选框的"已完成"列,然后关闭表单,并在"主"表单(包含要保存在SQL数据库中的其他信息)上按"保存"。
我正试图找到一种方法,将"票证编号"answers"已完成"的列表保存在一个公共列表中,然后将此列表保存在主窗体上的SQL数据库中。我认为这是最简单的方法,但找不到如何将票证编号和已完成状态保持在同一列表中。
最好的方法是使用DataBindings。首先,您必须为您的Ticket实现一个类。这可以像一样简单
class Ticket
{
public Ticket(string Number)
{
this.Number = Number;
}
public bool IsDone
{
set { _IsDone = value; }
get { return _IsDone; }
}
public string Number
{
set { _Number = value; }
get { return _Number; }
}
private bool _IsDone = false;
private string _Number = "";
}
现在您必须实现INotifyPropertyChanged
,这样UI才能更新。
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string PropertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
}
当然,您必须调用IsDone
和Number
的setter中的OnPropertyChanged
函数。
set
{
_IsDone = value;
OnPropertyChanged("IsDone");
}
(…)
set
{
_Number = value;
OnPropertyChanged("Number");
}
在您的表单中,您必须为DataGridView
定义一个ObservableCollection<Ticket>
。使用Add
将所有票证添加到其中。
在你们班的形式
private ObservableCollection<Ticket> Tickets;
在构造函数中
Tickets = new ObservableCollection<Ticket>();
YourDataGridName.ItemsSource = Tickets;
Tickets.Add(new Ticket("TicketNumber"));
带
<DataGrid.Columns>
<DataGridTextColumn Header="Ticket Number" IsReadOnly="True" Width="*" Binding="{Binding Number}"></DataGridTextColumn>
<DataGridCheckBoxColumn Header="Done?" IsReadOnly="False" Width="auto" Binding="{Binding IsDone}"></DataGridTextColumn>
</DataGrid.Columns>
定义DataGridView
的列。表单现在必须将ObservableCollection(您之前可以将其转换为List)返回到主表单。主表单现在可以使用.IsDone
检查是否选中了该框。