Границы привязки данных в веб-форме - PullRequest
1 голос
/ 24 августа 2010

У меня есть следующий DetailsView с несколькими BoundFields и SQlDataSource, который заполняет поля:

<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" DataKeyNames="TICKET_ID"
        DataSourceID="SqlDataSource1" HeaderText="Completed IT ticket information"
        CellPadding="4" ForeColor="#333333" GridLines="None" HorizontalAlign="Center">
        <Fields>
            <asp:BoundField DataField="TICKET_ID" SortExpression="TICKET_ID" Visible="False" />
            <asp:BoundField DataField="SUBMITTED_BY" SortExpression="SUBMITTED_BY" Visible="False" />

            <asp:BoundField DataField="TICKET_TITLE" HeaderText="Ticket Description" SortExpression="TICKET_TITLE" />
            <asp:BoundField DataField="SUBMITTED_BY" HeaderText="Submitted By" SortExpression="SUBMITTED_BY" />
            <asp:BoundField DataField="SOLUTION_NOTES" HeaderText="Solution Notes" SortExpression="SOLUTION_NOTES" />
            <asp:BoundField DataField="EMAIL_HISTORY" HeaderText="Email History" SortExpression="EMAIL_HISTORY" />
            <asp:BoundField DataField="COMPLETED_BY" HeaderText="Completed By" SortExpression="COMPLETED_BY" />
            <asp:BoundField DataField="COMPLETE_DATE" HeaderText="Completed Date" ReadOnly="True" SortExpression="COMPLETE_DATE" />
        </Fields>
    </asp:DetailsView>
    </div>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:TTPRODConnectionString %>"
        SelectCommand="SELECT USR_ITFAC.TS_ID AS TICKET_ID, USR_ITFAC.TS_EC1_SUBMITTER AS SUBMITTED_BY, USR_ITFAC.TS_TITLE AS TICKET_TITLE, USR_ITFAC.TS_SOLUTION_NOTES AS SOLUTION_NOTES, USR_ITFAC.TS_EMAIL_HISTORY AS EMAIL_HISTORY, TS_USERS.TS_NAME AS COMPLETED_BY, DATEADD(HOUR,-8,USR_ITFAC.TS_CLOSEDATE) AS COMPLETE_DATE FROM USR_ITFAC INNER JOIN TS_USERS ON USR_ITFAC.TS_COMPLETED_BY = TS_USERS.TS_ID WHERE (USR_ITFAC.TS_ISSUEID = '00033')">
        <SelectParameters>
            <asp:QueryStringParameter Name="ts_id" QueryStringField="id" />
        </SelectParameters>
    </asp:SqlDataSource>

Я жестко закодировал значение в конце запроса '00033', которое является идентификаторомзапись, которую я знаю, находится в базе данных.Я проверил запрос, и он возвращает ожидаемое значение. Я пытаюсь получить значения BoundField в коде после того, как пользователь нажал кнопку.

Protected Sub btnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Try
            ''Use a Dictionary to store answers to questions that were marked poor or fair
            Dim answers As New Dictionary(Of String, String)

            ''For Each test
        For Each dv_row As DetailsViewRow In DetailsView1.Rows
            ''Print rows data to console
        Next

        Catch ex As Exception
            lblWarn.Text = "<br /><b>Please answer all the questions on this survey</b><br />"
            'Response.Write(ex)
        End Try
    End Sub

Выше Iя делаю тест для извлечения значений и печати их на экране, проблема в том, что количество строк равно 0, я не уверен, почему это так.Я ожидал, что количество строк будет равно 8, при отладке я заметил, что количество полей равно 8, но я не уверен, как получить значения из полей.Я думал, что способ получить данные строки был что-то вроде:

Dim rowText As String = DetailsView1.Rows(0).Cells(1).Text

Но когда я пытаюсь это сделать, я получаю исключение Null.Любое понимание приветствуется.

Ответы [ 2 ]

0 голосов
/ 25 августа 2010

Был в состоянии получить его и запустить.Оказывается, что BoundFields не заполняются, потому что параметр в QueryStringField, а именно «id», не был указан в URL-адресе запроса.Чтобы решить эту проблему, я сначала попытался переписать путь URL-адреса на Page_Load, который не работал, поэтому я просто создал отдельную страницу с гиперссылкой на страницу, над которой я работаю, с переменной, добавленной в конец URL-адреса, который обеспечиваетQueryString для источника SQLDataSource для ссылки.Подробнее о свойстве QueryString здесь .

0 голосов
/ 24 августа 2010

Я неправильно прочитал код.FindControl () эффективен при использовании шаблонов.

Попробуйте вместо этого использовать метод FindControl(controlID) в представлении сведений для поиска элемента управления с привязкой к данным.Метод возвращает объект типа Control, поэтому вам, вероятно, придется набрать приведение результата, чтобы получить от него реальное использование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...