【问题标题】:Totally lost – data binding expressions inside GridView’s template完全迷失了——GridView 模板中的数据绑定表达式
【发布时间】:2010-03-31 18:32:43
【问题描述】:

1) 在 aspx 页面上,我们定义了名为 gvwPolls 的 GridView 控件,在其模板中,我们定义了一个名为 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.DataBindPollID='&lt;%# Eval("ID") %&gt;'&lt;%# Eval("QuestionText") %&gt; 表达式被评估之前被调用?!

b) 有人可以解释在评估 PollID='&lt;%# Eval("ID") %&gt;'&lt;%# Eval("QuestionText") %&gt; 表达式之前如何或为什么调用 gvwPollBox1.DataBind 吗?

2) 继续上面的例子:

-- pollBox1 用户控件定义了一个名为rptOptions的Repeater控件:

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

-- 在 pollBox1 的 代码隐藏文件中,我们将 rptOptions 绑定到 DoBinding() 方法内的数据源。

-- 我们还覆盖了 pollBox1 的 DataBind() 方法:

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

a) 我假设由于覆盖 pollBox1.DataBind(),数据绑定表达式 &lt;%# Eval("pollBoxTitle") %&gt;(在 rptOptions 模板中定义)将在 a调用 DoBinding 方法?如果是这样,那么&lt;%# Eval("pollBoxTitle") %&gt; 不会在 rptOptions 实际绑定到数据源之前得到评估吗?

b) 如果是这种情况,那么 rptOptions 如何能够从数据源中提取值(来自数据源的 pollBoxtitle 属性),如果当时&lt;%# Eval("pollBoxTitle") %&gt; 表达式已评估,rptOptions 尚未绑定到任何数据源?

感谢

【问题讨论】:

    标签: asp.net data-binding gridview


    【解决方案1】:

    我无法解释为什么页面生命周期是这样的,可能与在父对象之前渲染子对象有关。究竟什么时候在 PollBox 控件中调用 .DataBind()?尝试将其移动到生命周期后期的事件中,例如 PreRender。

    还有另一种方法可以确保它以您想要的方式工作: 订阅RowDataBound事件,使用.FindControl("YourPollBoxID")获取控件当前绑定行的实例,设置属性并手动执行.DataBind();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-27
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多