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

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

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

К сожалению, GridView не связывается, когда в строке trPickFromList2 указываются атрибуты id и runat = "server". Если я удалю 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" />
        ...
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
1 731
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

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

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

Ответ принят как подходящий

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

С jQuery:

$ ('. classOnShowRadioButton'). click (function () { $ ('. trToShow'). шоу (); $ ('. trToHide'). hide (); });

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

Хорошее предложение. Нет веской причины, просто мы не большой магазин JavaScript. Есть некоторые дополнительные проблемы, такие как ошибки проверки при обратной передаче, которые также необходимо обработать.

marc 30.10.2008 22:12

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

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

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

marc 30.10.2008 23:10

Причина, по которой я спрашиваю, заключается в том, что вы превращаете свой TR в объект сервера, чтобы показать / скрыть его. Но ваш GridView уже является серверным объектом, и вы можете показать / скрыть его сам по себе. Единственное предостережение - TR все равно будет отображаться (пустым). Без стола чище.

sliderhouserules 31.10.2008 19:47

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

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