【问题标题】:GridView/ObjectDataSource inside runat=server container does not bindrunat=server 容器内的 GridView/ObjectDataSource 未绑定
【发布时间】:2008-10-30 17:44:32
【问题描述】:

我有一个带有 2 个单选按钮的小型 Web 表单,分别称为 PickFromList 和 EnterValue。选中 PickFromList 后,我​​想显示一个已配置为绑定到 ObjectDataSource 的 GridView。选中 EnterValue 后,我希望 GridView 消失。

此表单使用表格进行布局,并希望根据适当的数据和用户输入隐藏/显示适当的行。

不幸的是,当 trPickFromList2 行指定 id 和 runat="server" 属性时,GridView 没有绑定。如果我从 trPickFromList2 行中删除 id 和 runat="server" ,它将成功绑定。

有什么想法吗?

<table id="tblOptions" runat="server">
    <tr id="trPickFromList1" runat="server">
        <td>
            <asp:RadioButton ID="rbFromList" runat="server" GroupName="Selection" 
                Text="Get Data From Existing Item" AutoPostBack="True" 
                oncheckedchanged="rbromList_CheckedChanged" />
        </td>
    </tr>
    <tr id="trPickFromList2" runat="server">
        <td style="padding-left:20px">
            <asp:GridView ID="gvList" runat="server" AutoGenerateColumns="False" 
                DataSourceID="odsList" Width="400px" onrowdatabound="gvList_RowDataBound">
                <Columns>
                    ...
                </Columns>
            </asp:GridView>
        </td>
    </tr>
    <tr id="trEnterValue1" runat="server">
        <td>
            <asp:RadioButton ID="rbEnterValue" runat="server" GroupName="Selection" 
                            Text="Create a New Item"
                            AutoPostBack="True" 
                            oncheckedchanged="rbEntered_CheckedChanged" />
        ...

【问题讨论】:

    标签: asp.net data-binding gridview objectdatasource


    【解决方案1】:

    我最终实现了Wilco Bauwer's RowSelectorField control 来解决这个问题。这不是一个完美的解决方案,因为控件显示所选行的索引值而不是所选数据键值;但是,效果很好。

    【讨论】:

      【解决方案2】:

      为什么不直接使用 javascript 显示/隐藏 TR?这样您就不会遇到这个问题,并且您将拥有一个响应速度更快的 UI。

      使用 jQuery:

      $('.classOnShowRadioButton').click(function(){ $('.trToShow').show(); $('.trToHide').hide(); });

      然后显然对另一个单选按钮执行相反的操作。

      【讨论】:

      • 这是个好建议。没有什么好的理由,只是我们不是一家大型的 JavaScript 商店。还有一些额外的问题,例如回发时的验证错误也必须处理。
      【解决方案3】:

      hmm.. 不太确定,但让我有好几次感觉的是 AutoWireEvents 设置为 false,它位于 部分的顶部。抱歉,如果没有帮助,但是像这样烦人且微不足道的事情很可能是问题所在。

      【讨论】:

        【解决方案4】:

        如果乔建议的 AutoWireEvents 回答不是问题,您也可以尝试从 tr 标签中删除 runat=server,而是用占位符将它们包装起来,并使用占位符来控制可见性。 (注意,不要使用面板,否则会导致 html 无效)

        【讨论】:

          【解决方案5】:

          noticed the same behavior 在带有 runat="server" 的 TR 标记内使用 FormView

          【讨论】:

            【解决方案6】:

            您使用表格进行布局有什么特别的原因吗?尝试将所有控件移出表格,并让单选按钮使实际的 GridView 可见/不可见。

            【讨论】:

            • 仅用于对齐目的 - 20px in 使网格从属于单选按钮。
            • 我问的原因是因为您将 TR 转换为服务器对象以显示/隐藏它。但是您的 GridView 已经是一个服务器对象,您可以自行显示/隐藏它。这样做的唯一警告是 TR 仍将被渲染(空)。没有桌子更干净。
            猜你喜欢
            • 2018-05-18
            • 2013-05-09
            • 2012-05-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-01-17
            • 1970-01-01
            相关资源
            最近更新 更多