例如,我有一个数据网格,并希望在数据绑定之前和数据绑定之后对它做一些事情,如下所示:
dgvTasksDocList.SaveLayoutToFile();
sTATUSCHANGESEXTENDEDBindingSource.DataSource = dt;
dgvTasksDocList.RestoreLayoutFromFile();
我希望在绑定某些源时添加所有这些代码。有没有一种简单的方法可以在某些操作之前/之后编写这样的代码(当然我可以添加这两行,但可能有一些已知的方法来做这些事情)?
答案 0 :(得分:0)
似乎是AOP的案例 - http://en.wikipedia.org/wiki/Aspect-oriented_programming。
例如,使用PostSharp,您将能够创建属性PersistLayout
并将其应用为:
[PersistLayout]
public void BindDataSource(object dt)
{
sTATUSCHANGESEXTENDEDBindingSource.DataSource = dt;
}
然后Postsharp将在编译时扩展源代码以调用您的其他两行。
其他想法可能是在sTATUSCHANGESEXTENDEDBindingSource.DataSource
属性设置器中调用这两个方法,但这个决定需要更多的上下文来知道。
答案 1 :(得分:0)
public class MyDGV : DataGridView
{
public MyDGV()
{
DataSourceChanged += (s, e) => SaveLayoutToFile();
DataBindingComplete += (s, e) => RestoreLayoutFromFile();
}
}
答案 2 :(得分:0)
使用扩展方法制作它,现在它看起来像:
dgvTasksDocList.BindSourceAndSaveLayouts(sTATUSCHANGESEXTENDEDBindingSource, dt);
甚至:
dgvTasksDocList.BindSourceAndSaveLayouts(dt);
因为dgvTasksDocList.DataSource
可以投放到BindingSource
(确定我必须提供BindingSource
)