C # ASP.NET Binding Controls через общий метод - PullRequest
3 голосов
/ 01 мая 2010

У меня есть несколько веб-приложений, которые я поддерживаю, и я очень часто пишу один и тот же блок кода снова и снова, чтобы связать GridView с источником данных. Я пытаюсь создать универсальный метод для обработки привязки данных, но у меня возникают проблемы с его настройкой для работы с повторителями и списками данных.

Вот общий метод, который у меня есть:

public void BindControl<T>(T control, SqlCommand sql) where T : System.Web.UI.WebControls.BaseDataBoundControl
    {
        cmd = sql;
        cn.Open();
        SqlDataReader dr = cmd.ExecuteReader();
        if (dr.HasRows)
        {
            control.DataSource = dr;
            control.DataBind();
        }
        dr.Close();
        cn.Close();
    }

Таким образом, я могу просто определить свой CommandText, а затем вызвать «BindControls (myGridView, cmd)» вместо того, чтобы повторно вводить этот же базовый блок кода каждый раз, когда мне нужно привязать сетку.

Проблема в том, что это не работает с повторителями или списками данных. Каждый из этих элементов управления наследует свои соответствующие методы «DataSource» и «DataBind» из разных классов. Кто-то на другом форуме предложил мне реализовать интерфейс, но я не уверен, как заставить это работать.

GridView, Datalist и Repeater получают свои соответствующие методы «DataBind» из классов BaseDataBoundControl, BaseDataList и Repeater. Как мне создать единый интерфейс, чтобы связать их все вместе? Или мне лучше использовать 3 перегрузки для этого метода?

  • Dave

Ответы [ 2 ]

0 голосов
/ 01 мая 2010

Я делал это и раньше, и создание 3-х перегрузок, как вы и предлагали, является абсолютно хорошим решением. Уже слишком поздно для создания «привязываемого» интерфейса, как вы предполагаете, интерфейсы должны быть реализованы во время проектирования объекта.

0 голосов
/ 01 мая 2010

Я бы попытался установить свойство DataSource и запустить метод DataBind () с отражением. И не привязывайте тип T к определенному типу.

...