2012-10-25 38 views
1

我一直在試圖找出什麼是錯誤的下面的GridView幾個小時無濟於事,所以我想我會尋求一些幫助。只有一部分GridView行更新

我有一個ASP GridView控件,它從數據庫中檢索電影會話的詳細信息,並允許編輯它們。

除了當我嘗試更新一行時,一切正常。當我更新一行時,只有數據庫中的cinemaNo字段更新以及其他兩個字段要更新(日期爲&時間),用NULL覆蓋存儲在數據庫中這些字段中的任何內容,而不會引發任何錯誤消息。

當我將@date和@time UpdateParameters的DefaultValue手動設置爲有效的日期/時間時,行更新完美地工作,但是當我在GridView中輸入日期/時間並使用Update按鈕。我懷疑這個問題可能與綁定有關?

這裏是我的代碼:

<asp:SqlDataSource ID="srcSessionList" runat="server" ConnectionString="<%$ ConnectionStrings:database %>" EnableCaching="True" CacheDuration="20" FilterExpression="movieID = '{0}'" 
    SelectCommand="SELECT s.dateAndTime, m.title, s.cinemaNo, m.movieID, s.sessionID 
     FROM Session s 
     INNER JOIN Movie m ON (s.movieID=m.movieID) 
     INNER JOIN Theatre t ON (s.theatreID=t.theatreID) 
     WHERE s.theatreID=(SELECT ts.theatreID FROM TheatreAndStaff ts INNER JOIN Staff s ON (ts.staffID=s.staffID) INNER JOIN Theatre t ON (ts.theatreID=t.theatreID) WHERE [email protected]) 
     ORDER BY s.dateAndTime ASC" 
    UpdateCommand="UPDATE Session SET dateAndTime=CONVERT(datetime2, @date + ' ' + @time, 103), [email protected] WHERE [email protected]"> 
    <SelectParameters> 
     <asp:Parameter Name="user" Type="String" /> 
    </SelectParameters> 
    <UpdateParameters> 
     <asp:Parameter Name="sessionID" Type="Int32"/> 
     <asp:Parameter Name="cinemaNo" Type="Int32"/> 
     <asp:Parameter Name="date" Type="String" /> 
     <asp:Parameter Name="time" Type="String" /> 
    </UpdateParameters> 
    <FilterParameters> 
     <asp:ControlParameter ControlID="ddlMovieList" PropertyName="SelectedValue" /> 
    </FilterParameters> 
</asp:SqlDataSource> 

... 

<asp:UpdatePanel ID="UpdatePanel" runat="server"> 
<ContentTemplate> 
<asp:GridView ID="GridView1" runat="server" DataSourceID="srcSessionList" AutoGenerateColumns="False" ClientIDMode="Static" DataKeyNames="sessionID"> 
    <Columns> 
     <asp:CommandField ShowEditButton="True" ShowDeleteButton="True" /> 
     <asp:BoundField DataField="dateAndTime" HeaderText="Time" DataFormatString="{0:t}" ApplyFormatInEditMode="True" /> 
     <asp:BoundField DataField="dateAndTime" HeaderText="Date" DataFormatString="{0:dd/MM/yyyy}" ApplyFormatInEditMode="True" /> 
     <asp:BoundField DataField="title" HeaderText="Title" ReadOnly="True" /> 
     <asp:TemplateField HeaderText="Cinema"> 
      <EditItemTemplate> 
       <asp:DropDownList ID="ddlCinemaList" runat="server" DataSourceID="srcCinemaList" DataTextField="cinemaNo" DataValueField="cinemaNo" SelectedValue='<%# Bind("cinemaNo") %>' ></asp:DropDownList> 
      </EditItemTemplate> 
      <ItemTemplate> 
       <asp:Label ID="Label1" runat="server" Text='<%# Bind("cinemaNo") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
    <EmptyDataTemplate>No matching sessions.<br /></EmptyDataTemplate> 
</asp:GridView> 
</ContentTemplate> 
</asp:UpdatePanel> 

編輯:我進入日期DD/MM/YYYY

回答

0

我想通了哪裏出錯了。日期和時間的兩個綁定字段未綁定到日期和時間更新參數。我必須在代碼隱藏中手動執行,如下所示:

Protected Sub GridView2_RowUpdating(sender As Object, e As GridViewUpdateEventArgs) Handles GridView2.RowUpdating 
    Dim row As GridViewRow = GridView2.Rows(e.RowIndex) 
    srcSessionList.UpdateParameters("date").DefaultValue = CType(row.Cells(2).Controls(0), TextBox).Text 
    srcSessionList.UpdateParameters("time").DefaultValue = CType(row.Cells(1).Controls(0), TextBox).Text 
End Sub 
0

機會是你的日期字段是試圖把MM-DD-YYYY而不是YYYY -MM-DD,但直到您告訴我們您是如何輸入日期的,我們無法分辨。

+0

輸入日期爲DD/MM/YYYY。 – tneb