C#存取数据为所欲为(三)
今天迟到了---天气啊,什么时候能暖和点儿啊,我就纳了闷了,为什么上海的天气预报
还没有我们家乡的准呢,说下雨却是阴天,说多云偏偏大风大雨,昨天说天晴结果居然下点
儿雪了~~~~!房东又来了,又得掏一大笔银子啊-------
废话少说!还是来正经的要紧。。。。
接着昨天的聊,我们了解了当条记录是如何操作的就好办了,现在来说记录集的具体操
作,这节内容稍稍有些难,需要知道.NET泛型和泛型约束(这里我就不说了),还有几个原
始集合类的接口实现和继承关系------
其实对于记录集操作,我最偏向于继承.NET 原始集合类,因为它本身就集成了很多
功能,足以让我们应付很多问题,还可override很多虚拟方法,多好!!
OK! 说做就做,如下:
public abstract class TableCollection<T> : Collection<T>
where T : TableItem
{
}
这个抽象类自己实际要做的事情就是 1,判断Tableitem的IsDirty,IsNew,IsDeleted;
2,提交数据(对于集合而言,还没有到DB层)或返回数据至集合中。所以有代码:
{
// 提交
Collection<T> itemsToDelete = new Collection<T>();
foreach (T item in this.AllItems())
{
if (item.IsDeleted)
{
// 等待删除
itemsToDelete.Add(item);
}
else
{
// 恢复状态
item.AcceptChanges();
}
}
// 最后从collcection中移除
foreach (T item in itemsToDelete)
{
base.RemoveItem(IndexOf(item));
}
}
public void RejectChanges()
{
// 返回
Collection<T> itemsToDelete = new Collection<T>();
foreach (T item in this.AllItems())
{
if (item.IsNew)
{
// 准备要删的记录
itemsToDelete.Add(item);
}
else
{
// 单条记录返回
item.RejectChanges();
}
}
// 删除新增加的记录
foreach (T item in itemsToDelete)
{
base.RemoveItem(IndexOf(item));
}
}
protected override void RemoveItem(int index)
{
// 做个删除标记
this[index].Delete();
}
对如删除记录,为什么只做标记呢?很简单,假如在这里就彻底删了,最后TODB要删怎么办,没有了where后
面得条件就无法删了。其他就没有什么可说了,说明也很清楚^_^
上面代码中的this.AllItems()是不是很奇怪??就是获得整个集合的items,代码如下:
{
return this;
}
关键的在下面的代码中,我们要重新来实现GetEnumerator(),因为我们不是要所有的item , 而是选取我们所需
要的item :
{
foreach (T item in this.AllItems())
{
if (!item.IsDeleted)
{
yield return item;
}
}
}
OK,这个抽象类要做的实事就是这些了,这个家伙事做多了总是不爽,老想着要分点事儿给儿子做,不想让儿子吃
现成的!!这不,说着就来了 :
{
if (loadData)
{
Load();
}
}
//实际的继承类去实现
public abstract void Load();
那儿子怎么去做父亲交代的事儿呢,欲知如何,下回分解^_^^_^