GridView / ObjectDataSource внутри runat = серверный контейнер не связывает - PullRequest
1 голос
/ 30 октября 2008

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

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

К сожалению, GridView не связывается, когда в строке trPickFromList2 указаны идентификатор и атрибуты 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" />
        ...

Ответы [ 6 ]

2 голосов
/ 04 ноября 2008

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

1 голос
/ 30 октября 2008

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

С помощью jQuery:

$ ( 'classOnShowRadioButton'). Выберите (функция () { $ ( 'TrToShow') шоу (). $ ( 'TrToHide.) Скрывать (). });

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

0 голосов
/ 30 октября 2008

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

0 голосов
/ 30 октября 2008

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

0 голосов
/ 30 октября 2008

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

0 голосов
/ 30 октября 2008

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

...