我有以下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异常。任何见解都表示赞赏。
答案 0 :(得分:0)
我误读了代码。 FindControl()在使用模板时有效。
请尝试在详细信息视图中使用 FindControl(controlID)
方法来查找数据绑定控件。该方法返回类型为Control
的对象,因此您可能必须输入强制转换结果以获得实际用途。
答案 1 :(得分:0)
能够启动并运行。事实证明BoundFields没有被填充,因为QueryStringField中的参数,即“id”,没有在请求URL中指定。为了解决这个问题,我首先尝试重写Page_Load上的URL路径,但这个路径不起作用,所以我刚创建了一个单独的页面,其中包含指向我正在处理的页面的超链接,并在URL的末尾附加了一个变量要引用的SQLDataSource的QueryString。有关QueryString属性的更多信息here。