Попытка привязки к BASE gridview из класса - PullRequest
0 голосов
/ 26 октября 2011

Итак, я создал класс, который будет принимать некоторые данные, делать с ними что-то и, наконец, выдавать данные.

Я принимал devex gridview (хотя я предполагаю, что asp gridviews может работать с тем же ответом), добавляя его на страницу, создавая экземпляр моего класса (с идентификатором данных, которые я хотел вернуть) ... затем в коде моих страниц сзади на page_load, привязывая данные к сетке вида так:

 DashBoard1 = new DashBoard("661", baseUser);

 FFASPxGridView1.DataSource = DashBoard1.dtFinalTable;
 FFASPxGridView1.DataBind();

Все это прекрасно работает ... однако мы превратили это gridview в пользовательский элемент управления (добавив в него некоторые наши вещи), и МОЯ мысль состояла в том, что я хотел бы окружить свой класс панели инструментов вокруг gridview. Таким образом, я сделал свой класс приборной панели дочерним по сетке.

public class DashBoard : FFASPxGridView

Надеясь, что конечным продуктом может быть простое добавление этого элемента управления на страницу и создание экземпляра в коде, стоящем за [то есть DashBoard1 = new DashBoard ("661", baseUser); ] и WHALAH - готовый вид сетки будет отображаться.

Я ДУМАЛ, что мог бы добиться этого, привязавшись к моему дататайту в последних строках конструктора класса панели инструментов (после того, как я узнаю, что мой последний класс данных был создан) примерно так:

base.DataSource = dtFinalTable;  //I also tried this.dtFinalTable & this.DataSource, etc.
base.DataBind();

Когда я прохожу через это, с таблицей данных все в порядке, и я не получаю ошибок, но у меня нет данных для отображения в моем виде сетки на готовом продукте.

Кроме того, вернемся на страницу - я не могу связать данные с самим собой в событии page_load:

DashBoard1.DataSource = DashBoard1.dtFinalTable;
DashBoard1.DataBind();

Опять НИЧЕГО - но, как я уже сказал, если я свяжу это с обычным видом сетки, то получу данные ...

Может кто-нибудь сказать мне, о чем я не думаю? Я попытался переопределить pre_render и сделать это там, но это не сработало ... я просто в растерянности.

** Вот странное поведение (по крайней мере, для моего недоразумения): ЕСЛИ я помещаю два из этих элементов управления на страницу и пытаюсь связать один из наборов данных с другим, я получаю данные ...? **

DashBoard2.DataSource = DashBoard1.dtFinalTable;
DashBoard2.DataBind();

1 Ответ

1 голос
/ 27 октября 2011

У меня есть несколько советов:
Вы должны привязать сетку в обработчике события Init.Поэтому, если вы наследуете от ASPxGridView, у вас должно быть что-то вроде этого:

public class DashBoard : FFASPxGridView {
    public Dashboard() {
        Init += InitEventHandler;
    }

    public void InitEventHandler() {
        Datasource = yourDatasource;
        DataBind();
    }

Подробнее об использовании обработчиков Init / Event можно прочитать здесь: http://www.devexpress.com/Support/Center/kb/p/K18282.aspx

Если вы создаете пользовательский элемент управленияЛучше избегать наследования и переноса, содержащих элементы управления.Создайте CompositeControl и добавьте свою сетку в эту коллекцию Controls.Подробнее об этом здесь:

http://msdn.microsoft.com/en-us/library/zt27tfhy.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...