【问题标题】:Data binding boundfields in web formWeb 表单中的数据绑定绑定字段
【发布时间】:2010-08-23 21:47:50
【问题描述】:

我有以下 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”的末尾硬编码了一个值,这是我知道在数据库中的一条记录的 ID。我测试了查询,它按预期返回了一个值,我想做的是在用户按下按钮后在代码隐藏中获取 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

上面我正在做一个测试以获取值并将它们打印在屏幕上,问题是行数为 0,我不知道为什么会这样。我预计行数为 8,调试时我注意到字段数为 8,但我不确定如何从字段中获取值。我认为获取行数据的方法是这样的:

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

但是当我尝试时,我得到一个 Null 异常。任何见解都值得赞赏。

【问题讨论】:

  • 这很奇怪;我刚刚设置了您的代码,但绑定了除 SqlDataSource 之外的其他内容。我能够从 DetailsView1.Rows(0).Cells(1) 中获取文本。这让我想知道您的代码中是否有任何 DataBind() 调用导致过早重新绑定。
  • 这很奇怪,我确实在代码隐藏的 Page_Load 函数中调用了数据绑定。但即使我不这样做,我仍然会收到与上面一行相同的错误。

标签: asp.net web-applications webforms


【解决方案1】:

我误读了代码。 FindControl() 在使用模板时有效。

尝试在细节视图上使用FindControl(controlID) 方法来查找数据绑定控件。该方法返回一个Control 类型的对象,因此您可能必须对结果进行类型转换才能真正使用它。

【讨论】:

  • 是的,这是我想到的第一件事,但很快就放弃了,如果 BoundFields 可以做到这一点,那就太好了。
【解决方案2】:

能够启动并运行。原来 BoundFields 没有被填充,因为 QueryStringField 中的参数,即“id”,没有在请求 URL 中指定。为了解决这个问题,我首先尝试重写 Page_Load 上的 URL 路径,但没有成功,所以我只是创建了一个单独的页面,其中包含指向我正在处理的页面的超链接,并在 URL 的末尾附加了一个变量,该变量提供要引用的 SQLDataSource 的 QueryString。更多关于 QueryString 属性here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多