Обертка для кодового блока - PullRequest
0 голосов
/ 18 февраля 2011

Например, у меня есть сетка данных и я хочу сделать что-то с ней до привязки данных и после привязки данных, например так:

dgvTasksDocList.SaveLayoutToFile();
sTATUSCHANGESEXTENDEDBindingSource.DataSource = dt;
dgvTasksDocList.RestoreLayoutFromFile();

И я хочу добавить такой код во всех случаях, когда связываются некоторые источники.Есть ли простой способ написать такой код до / после какого-либо действия (Конечно, я могу добавить эти 2 строки, но может быть, есть какой-то известный способ сделать такие вещи)?

Ответы [ 3 ]

0 голосов
/ 18 февраля 2011
public class MyDGV : DataGridView
{
    public MyDGV()
    {
        DataSourceChanged += (s, e) => SaveLayoutToFile();
        DataBindingComplete += (s, e) => RestoreLayoutFromFile();
    }
}
0 голосов
/ 18 февраля 2011

Сделано это только методом расширения, теперь оно выглядит так:

dgvTasksDocList.BindSourceAndSaveLayouts(sTATUSCHANGESEXTENDEDBindingSource, dt);

Или даже:

dgvTasksDocList.BindSourceAndSaveLayouts(dt);

Поскольку dgvTasksDocList.DataSource может быть приведено к BindingSource (обязательноЯ ДОЛЖЕН предоставить, что BindingSource)

0 голосов
/ 18 февраля 2011

Кажется, дело в АОП - http://en.wikipedia.org/wiki/Aspect-oriented_programming.

Например, с помощью PostSharp вы сможете создать атрибут PersistLayout и применить его следующим образом:

[PersistLayout]
public void BindDataSource(object dt)
{
    sTATUSCHANGESEXTENDEDBindingSource.DataSource = dt;
}

Затем Postsharp расширит исходный код во время компиляции, чтобы вызвать ваши дополнительные две строки.

Другая идея может состоять в том, чтобы вызвать эти два метода в sTATUSCHANGESEXTENDEDBindingSource.DataSource свойстве setter, но это решение требует гораздо большего контекста, чтобы знать.

...