У меня есть небольшая веб-форма с двумя переключателями, назовите их 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" />
...





хм ... не совсем уверен, но кое-что, что меня поразило несколько раз, - это установить AutoWireEvents на false, это вверху в разделе <% page /%>. извините, если это не поможет, но что-то раздражающее и незначительное, вероятно, проблема.
Если предложенный Джо ответ AutoWireEvents не является проблемой, вы также можете попробовать удалить runat = server из тегов tr и вместо этого обернуть их заполнителями и использовать заполнители для управления видимостью. (Обратите внимание, не используйте панели, так как это приведет к неверному HTML)
Почему бы вам просто не показать / скрыть TR с помощью javascript? Таким образом, у вас не будет этой проблемы, и у вас будет гораздо более отзывчивый пользовательский интерфейс.
С jQuery:
$ ('. classOnShowRadioButton'). click (function () { $ ('. trToShow'). шоу (); $ ('. trToHide'). hide (); });
тогда, очевидно, сделайте обратное для другого переключателя.
Я заметил такое же поведение с FormView внутри тега TR с runat = "server"
Есть ли конкретная причина, по которой вы используете таблицу для макета? Попробуйте убрать все элементы управления из таблицы и сделать так, чтобы переключатели делали фактический GridView видимым / невидимым.
Просто для целей выравнивания - 20 пикселей, чтобы подчинить сетку переключателю.
Причина, по которой я спрашиваю, заключается в том, что вы превращаете свой TR в объект сервера, чтобы показать / скрыть его. Но ваш GridView уже является серверным объектом, и вы можете показать / скрыть его сам по себе. Единственное предостережение - TR все равно будет отображаться (пустым). Без стола чище.
В итоге я реализовал Элемент управления RowSelectorField Вилко Бауэра для решения этой проблемы. Это не идеальное решение, поскольку на панели управления отображается значение индекса выбранной строки, а не выбранные значения ключа данных; однако это сработало.
Хорошее предложение. Нет веской причины, просто мы не большой магазин JavaScript. Есть некоторые дополнительные проблемы, такие как ошибки проверки при обратной передаче, которые также необходимо обработать.