将子窗体中的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数据库中。我认为这是最简单的方法,但找不到如何将票证编号和已完成状态保持在同一列表中。

将子窗体中的datagridview保存到C#中的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));
    }

当然,您必须调用IsDoneNumber的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检查是否选中了该框。