从C#中的SQL数据库中的子表单保存datagridview

时间:2015-10-28 14:28:14

标签: c# sql-server forms datagridview

在C#中,我有一个名为“Details”的表单,它显示带有票号和“完成”列的数据网格视图(包含我不想保存的其他信息)。

例如:

    Ticket Number | Done
   _______________|________ 
       252014     |  v   
       252018     |     
       252024     |  v  
       252029     |  v 

用户必须使用复选框选中或取消选中“已完成”列,然后关闭表单并按“主”表单上的“保存”(其中包含要保存在SQL数据库中的其他信息)。

我正在尝试找到一种方法来保存公共列表中的“票号”和“完成”列表,然后将此列表保存在主窗体上的SQL数据库中。我认为这是最简单的方法,但无法找到如何将票号和完成状态保存在同一列表中。

1 个答案:

答案 0 :(得分:0)

最好的方法是使用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));
    }

当然,您必须在OnPropertyChangedIsDone的设置者中调用Number函数。

set 
{
    _IsDone = value;
    OnPropertyChanged("IsDone");
}

(...)

set 
{
    _Number = value;
    OnPropertyChanged("Number");
}

在您的表单中,您必须为ObservableCollection<Ticket>定义DataGridView。使用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是否检查过该框。