在C#中,我有一个名为“Details”的表单,它显示带有票号和“完成”列的数据网格视图(包含我不想保存的其他信息)。
例如:
Ticket Number | Done
_______________|________
252014 | v
252018 |
252024 | v
252029 | v
用户必须使用复选框选中或取消选中“已完成”列,然后关闭表单并按“主”表单上的“保存”(其中包含要保存在SQL数据库中的其他信息)。
我正在尝试找到一种方法来保存公共列表中的“票号”和“完成”列表,然后将此列表保存在主窗体上的SQL数据库中。我认为这是最简单的方法,但无法找到如何将票号和完成状态保存在同一列表中。
答案 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));
}
当然,您必须在OnPropertyChanged
和IsDone
的设置者中调用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
是否检查过该框。