2010-08-23 29 views
1

我有以下的DetailsView,与几个绑定列,和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

这很奇怪;我只是设置了你的代码,但绑定了一个SqlDataSource以外的东西。我能够从DetailsView1.Rows(0).Cells(1)中获取文本。这让我想知道是否在您的代码中调用了任何DataBind()调用以导致过早重新绑定。 – kbrimington 2010-08-23 22:12:57

+0

奇怪的是,我在代码隐藏的Page_Load函数中调用了数据绑定。但即使我不这样做,我仍然会得到与上面相同的错误。 – kingrichard2005 2010-08-24 15:27:35

回答

0

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

0

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

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

+0

是的,那是我想到的第一件事,很快就被解雇了,如果BoundFields可以这么做,那将会很好。 – kingrichard2005 2010-08-23 22:09:40