Выпадающий список приводит к gridview - PullRequest
0 голосов
/ 19 августа 2009

У меня возникли проблемы с получением результатов раскрывающихся списков в виде сетки, и я не нашел полезных статей для кода VB. Я пытаюсь создать сайт для тестов. Пока что у меня есть построение сетки с дополнительным столбцом для выпадающего списка, в котором будет выбран ответ «истина / ложь». Когда тест завершен, появляется кнопка отправки. Все хорошо, за исключением того, что мне нужно иметь возможность получать результаты каждого раскрывающегося списка после обратной передачи в переменную или массив (каждый тест содержит 10 вопросов), чтобы результаты можно было проверить / оценить. Когда результаты будут определены, я хотел бы отобразить метку на ее месте и соответственно изменить текстовое значение (правильное или неправильное), поэтому мне нужно будет также перечислить их (т.е. label1.text = "Correct!" , label2.text = "Неверно!" и т. д.).

Код пока.

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    DataSourceID="SqlDataSource1" BackColor="White" BorderColor="#3366CC" 
            BorderStyle="None" BorderWidth="1px" CellPadding="1">
    <RowStyle BackColor="White" ForeColor="#003399" />
    <Columns>
        <asp:BoundField DataField="Question" HeaderText="Question" 
            SortExpression="Question" />
        <asp:TemplateField HeaderText="Answer">
        <ItemTemplate>
        <% If Not IsPostBack Then%>
            <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlAnswer" 
            DataTextField="torf" DataValueField="torf">
            </asp:DropDownList> 
            <%Else%>
            <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
            <%End If%>    
        </ItemTemplate>
        </asp:TemplateField>
    </Columns>
    <FooterStyle BackColor="#99CCCC" ForeColor="#003399" />
    <PagerStyle BackColor="#99CCCC" ForeColor="#003399" HorizontalAlign="Left" />
    <SelectedRowStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />
    <HeaderStyle BackColor="#003399" Font-Bold="True" ForeColor="#CCCCFF" />
</asp:GridView>

Предыдущий код загружает 10 строк, 2 столбца (column1: Question | column2- [DropDownLists]: Answer). Я новичок в разработке, поэтому если вам нужна дополнительная информация, дайте мне знать.

Ответы [ 3 ]

1 голос
/ 20 августа 2009

Вот как я справился: создал приватную переменную уровня страницы для хранения нашего списка правильных / неправильных значений Приватные ответы как новый список (логический) 'создает строго типизированный список значений t / f

в Page.Load

если IsPostBack, то перебирать каждую строку для каждого gridRow As GridViewRow в GridView1.Rows 'получить выбранное значение для этого ответа Затемнить ответ в виде string = CType (gridRow.FindControl ("DropDownList1"), DropDownList) .SelectedValue добавить этот ответ в список Answers.Add (IsCorrectAnswer (ответ)) следующий конец если

функция IsCorrectAnswer определяет, является ли правильный ответ на этот вопрос верным, и возвращает логическое значение. Вам нужно написать эту функцию в соответствии с вашими потребностями.

в Button1.Click обработчик

'rowCounter будет служить индексом ответов Dim rowCounter as Integer = 0 Для каждого gridRow как GridViewRow в GridView1.Rows 'grid_RowDataBound обрабатывает привязку одной строки grid_RowDataBound (gridRow, rowCounter) rowCounter + 1 = Далее

наконец

Частный Sub grid_RowDataBound (gridRow как GridViewRow, rowCounter как Целое число) сделать раскрывающийся список невидимым CType (gridRow.FindControl ("DropDownList1"), DropDownList) .Visible = False «потому что мы будем использовать два свойства метки, для простоты доступа я сначала добавлю ее в переменную Затемнить метку As Label = CType (gridRow.FindControl ("Label1"), Label) установить ярлык видимым label.Visible = True 'установить текст label.Text = Iif (ответы (rowCounter), «исправить», «неверно») Конец Sub

Кто-то, возможно, имеет более чистое решение, чем это, но я знаю, что это работает, по крайней мере, насколько я понимаю проблему, с которой вы сталкиваетесь. Удачи

0 голосов
/ 19 августа 2009

проверить событие RowDataBound объекта gridview. Требуется два параметра: (byval отправитель как Object, byval e как GridViewRowEventArgs). С его помощью вы можете установить значение метки в каждой строке как «Правильно» или «Неправильно» при обратной передаче.

см. Пример на http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowdatabound.aspx для получения дополнительной информации

что касается получения ответов в переменную, вот несколько вариантов

1) проверка состояния. Это имеет некоторые накладные расходы, так что будьте осторожны с этим. 2) сохранить данные в объекте Session

0 голосов
/ 19 августа 2009

Как насчет привязки атрибута Visible к Page.IsPostBack (обратите внимание, что это в C #, так как я не знаком с синтаксисом для VB.NET ... Я уверен, что что-то подобное будет работать):

<ItemTemplate>
    <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlAnswer" 
        DataTextField="torf" DataValueField="torf" Visible='<%# !Page.IsPostBack %/>></asp:DropDownList> 
        <asp:Label ID="Label1" runat="server" Text="" Visible='<%# Page.IsPostBack %/></asp:Label>
</ItemTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...