GridView /ObjectDataSource внутри контейнера runat=server не привязывается

StackOverflow https://stackoverflow.com/questions/251091

Вопрос

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

Эта форма составлена с использованием таблицы и требует скрыть / показать соответствующие строки на основе соответствующих данных и пользовательского ввода.

К сожалению, GridView не привязывается, когда в строке trPickFromList2 указаны id и атрибуты runat="сервер".Если я удалю id и runat="server" из строки trPickFromList2, он успешно привязывается.

Есть какие-нибудь идеи?

<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" />
        ...
Это было полезно?

Решение

Почему бы вам просто не показать / скрыть TRS с помощью javascript?Таким образом, у вас не возникнет этой проблемы, и у вас будет гораздо более отзывчивый пользовательский интерфейс.

С помощью jQuery:

$('.classOnShowRadioButton').click(функция(){ $('.trToShow').show();$('.trToHide').скрыть();});

затем, очевидно, сделайте обратное для другого переключателя.

Другие советы

Я решил использовать элемент управления RowSelectorField Вилко Бауэра , чтобы решить эту проблему. Это не идеальное решение, поскольку элемент управления отображает значение индекса выбранной строки, а не выбранные значения ключа данных; Тем не менее, это сработало хорошо.

хм .. не совсем уверен, но кое-что, что меня несколько раз привлекло, это то, что AutoWireEvents имеет значение false, оно вверху в <% page /% > раздел. извините, если это не поможет, но что-то раздражающее и незначительное, как это может быть проблема.

Если ответ AutoWireEvents, предложенный Джо, не является проблемой, вы также можете попытаться удалить сервер runat = из тегов tr и вместо этого обернуть их заполнителями и использовать заполнители для управления видимостью. (Обратите внимание, не используйте панели, так как это приведет к неверному HTML)

Я заметил то же поведение с FormView внутри тега TR с runat = " server "

По какой-то конкретной причине вы используете таблицу для разметки? Попробуйте убрать все элементы управления из таблицы и сделать так, чтобы переключатели просто делали GridView видимым / невидимым.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top