2012-10-25 3 views
1

몇 시간 동안 GridView에 어떤 문제가 있는지 알아 내려고 노력 했으므로 도움이 필요하다고 생각했습니다.GridView 행 업데이트 중 일부만

DB에서 동영상 세션 세부 정보를 검색하고 편집 할 수있는 ASP GridView 컨트롤이 있습니다.

행을 업데이트하려고 시도 할 때를 제외하고 모든 것이 올바르게 작동합니다. 행을 업데이트 할 때 DB에서 cinemaNo 필드 업데이트 만 업데이트하려는 다른 두 필드 (날짜 & 시간)는 오류 메시지를 표시하지 않고 NULL로 DB의 해당 필드에 저장된 모든 항목을 덮어 씁니다.

@date 및 @time UpdateParameters의 DefaultValue를 유효한 날짜/시간으로 수동 설정할 때 행 업데이트가 완벽하게 작동하지만 GridView에 날짜/시간을 입력하고 업데이트를 사용할 때 작동하지 않습니다 단추. 문제가 바인딩과 관련이 있다고 생각합니까?

<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> 

편집 : 대신 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

기회가 날짜 필드에 넣어 위해 노력하고 있습니다/YYYY DD/MM과 날짜를 입력하고 MM-DD를-YYYY 여기

내 코드입니다 -MM-DD하지만 우리가 어떻게 당신이 당신의 데이트를 입력하는지 알려줄 때까지는 알 수 없습니다.

+0

날짜는 DD/MM/YYYY로 입력된다. – tneb