CRUD on BindingSource in Winforms
本文关键字:Winforms in BindingSource on CRUD | 更新日期: 2023-09-27 18:25:10
我有一个DataGridView
和一个使用bs.DataSource = list;
填充的BindingSource bs
,其中list
是BindingList<Item>
。
我只想让每个已更改的Item
都被通知它已更改,并且每个已删除的项目都被通知其已删除。或者,我希望在用户编辑网格并按下按钮后,可以访问更改的、新的和删除的项目。
编辑:
public abstract class Item : INotifyPropertyChanged { .......
public Item()
{
Id = IdCounter++;
Pairs = new HashSet<int>();
State = ItemState.NEW;
Name = "#noname";
Note = "";
PropertyChanged += new PropertyChangedEventHandler(Item_PropertyChanged);
}
void Item_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
SetChanged();
}
/* nastaví příznak, že se něco změnilo - to následně vyvolá UPDATE (při použití SQL úložiště) */
public void SetChanged()
{
State = ItemState.CHANGED;
}
您需要在BindingList<Item>
或BindingSource bs
上侦听ListChanged
事件。在ListChangedEventArgs
中,具有的ListChangedType
有关于更改内容的特定细节:
重置-列表的大部分内容都已更改。任何监听控件都应该刷新列表中的所有数据。
ItemAdded-添加到列表NewIndex包含已添加项的索引。
项目已删除-从列表中删除的项目。NewIndex包含已删除项目的索引。
ItemMoved-在中移动的项目列表。OldIndex包含项目的上一个索引,而NewIndex包含项目的新索引。
项目更改-项目已在列表中更改。NewIndex包含的项的索引已更改。
我把你提到的那些加粗了。
更新
好的,这就是Item
类的样子:
public class Item : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private int _Id;
private HashSet<int> _Pairs;
private ItemState _State;
private String _ItemName;
private String _Note;
public Item()
{
Id = IdCounter++;
Pairs = new HashSet<int>();
State = ItemState.NEW;
Name = "#noname";
Note = "";
}
public int Id
{
get { return _Id; }
set
{
if(_Id != value)
{
_Id = value;
NotifyPropertyChanged("Id");
}
}
}
... Implement other properties like above/below
// Dont use 'Name' as a property type
public String ItemName
{
get { return _ItemName; }
set
{
if(_ItemName!= value)
{
_ItemName= value;
NotifyPropertyChanged("ItemName");
}
}
}
...
public void NotifyPropertyChanged(String propertyName)
{
PropertyChangedEventHandler prop_changed = PropertyChanged;
if (prop_changed != null)
{
prop_changed(this, new PropertyChangedEventArgs(propertyName));
}
}
}
然后,当您附加到BindingList时,您应该获得更新。然后,当您收到这些事件或通过数据绑定时,您可以更改项目的状态。
您可以在BindingSource 上侦听CurrentItemChange事件
http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.aspx