Полностью потерян - выражения привязки данных внутри шаблона GridView - PullRequest
0 голосов
/ 31 марта 2010

1) На странице aspx мы определяем элемент управления GridView с именем gvwPolls , а внутри его шаблона мы определяем пользовательский элемент управления с именем pollBox1

<asp:GridView ID="GridView1" DataSourceID="objPolls" ...>
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                Question is : <%# Eval("QuestionText") %> <br />
                <mb:PollBox ID="PollBox1" runat="server" PollID='<%# Eval("ID") %>' />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
<asp:ObjectDataSource ID="objPolls" ...></asp:ObjectDataSource>

a) Я предполагаю, что внутри шаблона gvwPolls gvwPollBox1.DataBind вызывается до того, как выражения PollID='<%# Eval("ID") %>' и <%# Eval("QuestionText") %> будут оценены ?!

b) Может ли кто-нибудь объяснить, как или почему gvwPollBox1.DataBind вызывается до того, как выражения PollID='<%# Eval("ID") %>' и <%# Eval("QuestionText") %> будут оценены?

2) Продолжая приведенный выше пример:

- pollBox1 пользовательский элемент управления определяет элемент управления Repeater с именем rptOptions :

<asp:Repeater runat="server" ID="rptOptions">
    <ItemTemplate>
        <%# Eval("pollBoxTitle") %>
    </ItemTemplate>
</asp:Repeater>

- В файле с выделенным кодом pollBox1 мы связываем rptOptions с источником данных внутри DoBinding () метод.

- Мы также переопределяем метод DataBind () pollBox1:

  public override void DataBind()
  {
      base.DataBind();
      DoBinding();
  }

a) Я предполагаю, что из-за переопределения pollBox1.DataBind () выражение привязки данных <%# Eval("pollBoxTitle") %> (определенное внутри шаблона rptOptions) будет оценено до вызова DoBinding метод? Если это так, не будет ли <%# Eval("pollBoxTitle") %> оценен до того, как rptOptions будет фактически привязан к источнику данных?

b) Если это так, то как rptOptions может извлекать значение (из свойства pollBoxtitle источника данных ) из источника данных, если в то время <%# Eval("pollBoxTitle") %> выражение получено, rptOptions еще не привязано ни к одному источнику данных?

1065 * спасибо *

1 Ответ

1 голос
/ 31 марта 2010

Я не могу объяснить, почему жизненный цикл страницы таков, вероятно, как-то связан с рендерингом childs перед родительским объектом. Когда именно вы вызываете .DataBind () в элементе управления PollBox? Попробуйте переместить его в событие более позднего жизненного цикла, например PreRender.

Существует также другой способ убедиться, что он работает так, как вы хотите: Подпишитесь на событие RowDataBound, используйте .FindControl ("YourPollBoxID"), чтобы получить экземпляр текущей связанной строки элемента управления, установить свойства и выполнить ручное управление .DataBind ();

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