2013-08-07 2 views
1

는 asp.net 응용 프로그램을하고 삽입, 업데이트를 작성하고 세부 사항ASP.NET은 - 도대체

를 볼 수에 대한 삭제 작업을하고이 캐스트 오류의 원인이 무엇 내 삽입이 잘 작동

, 지금은 할 노력하고있어 업데이트,하지만 업데이트 버튼을 누르면 YSOD가 표시됩니다. 양식에 단 하나의 날짜가 있으며 삽입 및 편집을 위해 정확히 동일한 템플리트를 사용합니다. 다음은 ASP와 스택 추적과 내가 그것을 볼 수있는 것은이 시점에서 내 잠수정의에없는에서 '날짜 시간'에서 'INT32'에서

<asp:DetailsView ID="dvInvoice" runat="server" Height="50px" Width="250px" DataSourceID="odsInvoices" AutoGenerateRows="False" DataKeyNames="ID"> 
     <Fields> 
      <asp:TemplateField HeaderText="ID" InsertVisible="False" SortExpression="ID"> 
       <EditItemTemplate> 
        <asp:Label ID="Label1" runat="server" Text='<%# Eval("ID") %>'></asp:Label> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label1" runat="server" Text='<%# Bind("ID") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="TripNo" SortExpression="TripNo"> 
       <EditItemTemplate> 
        <asp:TextBox ID="txtTripNo" runat="server" Text='<%# Bind("TripNo") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <InsertItemTemplate> 
        <asp:TextBox ID="txtTripNo" runat="server" Text='<%# Bind("TripNo") %>'></asp:TextBox> 
        <asp:RequiredFieldValidator ValidationGroup="vDetailErrors" 
         CssClass="ErrorClass" ID="rfvTripNo" runat="server" 
         ErrorMessage="An trip no must entered" 
         ControlToValidate="txtTripNo" 
         Display="Dynamic"> 
        </asp:RequiredFieldValidator> 
       </InsertItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label2" runat="server" Text='<%# Bind("TripNo") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="TypeID" SortExpression="TypeID"> 
            <InsertItemTemplate> 
        <asp:DropDownList ID="ddLineTypes" 
         runat="server" 
         SelectedValue='<%# Bind("TypeID")%>' 
         DataSourceID="odsLineTypes" 
         DataTextField="TypeDesc" 
         DataValueField="TypeID" 
         AppendDataBoundItems="True" AutoPostBack="True" OnSelectedIndexChanged="Type_Change" 
         > 
         <asp:ListItem Value="-1" Selected="True">Select a Type</asp:ListItem> 
        </asp:DropDownList> 
        <br /> 
        <asp:CompareValidator ID="cvLineTypes" runat="server" 
         ControlToValidate="ddLineTypes" CssClass="ErrorClass" 
         ErrorMessage="Please Select a Type" 
         ValidationGroup="vDetailErrors" ValueToCompare="-1" Operator="NotEqual" 
         Display="Dynamic"></asp:CompareValidator> 
        <asp:ObjectDataSource ID="odsLineTypes" runat="server" OldValuesParameterFormatString="original_{0}" TypeName="LineTypesBLL" SelectMethod="GetLineTypes"> 
         <SelectParameters> 
          <asp:Parameter DefaultValue="True" Name="InvOnly" Type="Boolean" /> 
         </SelectParameters> 
        </asp:ObjectDataSource> 
       </InsertItemTemplate> 
       <EditItemTemplate> 
        <asp:DropDownList ID="ddLineTypes" 
         runat="server" 
         SelectedValue='<%# Session("CurrType")%>' 
         DataSourceID="odsLineTypes" 
         DataTextField="TypeDesc" 
         DataValueField="TypeID" 
         AppendDataBoundItems="True" AutoPostBack="True" OnSelectedIndexChanged="Type_Change" 
         > 
        </asp:DropDownList> 
        <br /> 
        <asp:CompareValidator ID="cvLineTypes" runat="server" 
         ControlToValidate="ddLineTypes" CssClass="ErrorClass" 
         ErrorMessage="Please Select a Type" 
         ValidationGroup="vDetailErrors" ValueToCompare="-1" Operator="NotEqual" 
         Display="Dynamic"></asp:CompareValidator> 
        <asp:ObjectDataSource ID="odsLineTypes" runat="server" OldValuesParameterFormatString="original_{0}" TypeName="LineTypesBLL" SelectMethod="GetLineTypes"> 
         <SelectParameters> 
          <asp:Parameter DefaultValue="True" Name="InvOnly" Type="Boolean" /> 
         </SelectParameters> 
        </asp:ObjectDataSource> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label3" runat="server" Text='<%# Bind("TypeID") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="VendorID" SortExpression="VendorID"> 
            <EditItemTemplate> 
        <asp:DropDownList ID="ddVendors" 
         runat="server" 
         SelectedValue='<%# Bind("VendorID")%>' 
         DataSourceID="odsVendors" 
         DataTextField="Name" 
         DataValueField="VendorID" 
         AppendDataBoundItems="True" 
         AutoPostBack ="True"> 
         <asp:ListItem Value="-1">Select a Vendor</asp:ListItem> 
        </asp:DropDownList> 
        <br /> 
        <asp:CompareValidator ID="cvVendors" runat="server" 
         ControlToValidate="ddVendors" CssClass="ErrorClass" 
         ErrorMessage="Please Select a Vendor" 
         ValidationGroup="vDetailErrors" ValueToCompare="-1" Operator="NotEqual" 
         Display="Dynamic"></asp:CompareValidator> 
        <asp:ObjectDataSource ID="odsVendors" runat="server" OldValuesParameterFormatString="original_{0}" SelectMethod="GetVendors" TypeName="VendorsBLL"></asp:ObjectDataSource> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label4" runat="server" Text='<%# Bind("VendorID") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="InvNo" SortExpression="InvNo"> 
            <EditItemTemplate> 
        <asp:TextBox ID="txtInvNo" runat="server" Text='<%# Bind("InvNo") %>'></asp:TextBox> 
        <asp:RequiredFieldValidator ValidationGroup="vDetailErrors" 
         CssClass="ErrorClass" ID="rfvInvNo" runat="server" 
         ErrorMessage="An invoice number must be entered" 
         ControlToValidate="txtInvNo" 
         Display="Dynamic"> 
        </asp:RequiredFieldValidator> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label5" runat="server" Text='<%# Bind("InvNo") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="InvAmount" SortExpression="InvAmount"> 
            <EditItemTemplate> 
        <asp:TextBox ID="txtInvAmount" runat="server" Text='<%# Bind("InvAmount") %>'></asp:TextBox> 
        <br /> 
        <asp:RequiredFieldValidator ValidationGroup="vDetailErrors" 
         CssClass="ErrorClass" ID="rfvInvAmount" runat="server" 
         ErrorMessage="An invoice amount must be entered" 
         ControlToValidate="txtInvAmount" 
         Display="Dynamic"></asp:RequiredFieldValidator> 
        <br /> 
        <asp:CompareValidator ValidationGroup="vDetailErrors" 
         CssClass="ErrorClass" ID="cvInvAmount" runat="server" 
         ControlToValidate="txtInvAmount" 
         ErrorMessage="A numeric Invoice Amount MUST be entered" 
         Operator="DataTypeCheck" Type="Currency" 
         Display="Dynamic"></asp:CompareValidator> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label6" runat="server" Text='<%# Bind("InvAmount") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="InvDate" SortExpression="InvDate"> 
            <EditItemTemplate> 
        <asp:TextBox ID="txtInvDate" runat="server" Text='<%# Bind("InvDate") %>'></asp:TextBox> 
        <br /> 
        <asp:RequiredFieldValidator ValidationGroup="vDetailErrors" 
         CssClass="ErrorClass" ID="rfvInvDate" runat="server" 
         ErrorMessage="An invoice date must be entered" 
         ControlToValidate="txtInvDate" 
         Display="Dynamic"> 
        </asp:RequiredFieldValidator> 
        <br /> 
        <asp:CustomValidator ValidationGroup="vDetailErrors" 
         CssClass="ErrorClass" 
         ID="cvInvDate" runat="server" 
         ErrorMessage="A valid date within the last two years and no later than next year must be entered" 
         OnServerValidate="cvInvDate_ServerValidate" ControlToValidate="txtInvDate" 
         Display="Dynamic"> 
        </asp:CustomValidator> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label7" runat="server" Text='<%# Bind("InvDate") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:CommandField CausesValidation="true" ShowEditButton="true" ShowInsertButton="true" ValidationGroup="vDetailErrors" /> 
     </Fields> 
    </asp:DetailsView> 
    <p> 
     <asp:ObjectDataSource ID="odsInvoices" runat="server" InsertMethod="AddInvoice" OldValuesParameterFormatString="original_{0}" SelectMethod="GetInvoicesByTripNo" TypeName="InvoicesBLL" UpdateMethod="UpdateInvoice"> 
      <InsertParameters> 
       <asp:ControlParameter ControlID="dvInvoice" Name="TripNo" PropertyName="SelectedValue" Type="String" /> 
       <asp:ControlParameter ControlID="dvInvoice" Name="TypeID" PropertyName="SelectedValue" Type="Int32" /> 
       <asp:ControlParameter ControlID="dvInvoice" Name="VendorID" PropertyName="SelectedValue" Type="Int32" /> 
       <asp:ControlParameter ControlID="dvInvoice" Name="InvNo" PropertyName="SelectedValue" Type="String" /> 
       <asp:ControlParameter ControlID="dvInvoice" Name="InvAmount" PropertyName="SelectedValue" Type="Decimal" /> 
       <asp:ControlParameter ControlID="dvInvoice" Name="InvDate" PropertyName="SelectedValue" Type="DateTime" /> 
       <asp:Parameter Name="ID" Type="Int32" /> 
      </InsertParameters> 
      <SelectParameters> 
       <asp:ControlParameter ControlID="txtLoadNo" Name="TripNo" PropertyName="Text" Type="String" /> 
      </SelectParameters> 

      <UpdateParameters> 
       <asp:ControlParameter ControlID="dvInvoice" Name="TripNo" PropertyName="SelectedValue" Type="String" /> 
       <asp:ControlParameter ControlID="dvInvoice" Name="TypeID" PropertyName="SelectedValue" Type="Int32" /> 
       <asp:ControlParameter ControlID="dvInvoice" Name="VendorID" PropertyName="SelectedValue" Type="Int32" /> 
       <asp:ControlParameter ControlID="dvInvoice" Name="InvNo" PropertyName="SelectedValue" Type="String" /> 
       <asp:ControlParameter ControlID="dvInvoice" Name="InvAmount" PropertyName="SelectedValue" Type="Decimal" /> 
       <asp:ControlParameter ControlID="dvInvoice" Name="InvDate" PropertyName="SelectedValue" Type="DateTime" /> 
       <asp:ControlParameter ControlID="dvInvoice" Name="original_ID" PropertyName="SelectedValue" Type="Int32" /> 
      </UpdateParameters> 

     </asp:ObjectDataSource> 

YSOD 오류

잘못된 캐스트. 설명 : 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 오류 및 코드에서 시작된 위치에 대한 자세한 정보는 스택 추적을 검토하십시오.

예외 정보 : System.InvalidCastException : 'Int32'에서 'DateTime'으로의 잘못된 캐스트입니다.

소스 오류 :

처리되지 않은 예외가 현재 웹 요청을 실행하는 동안 생성되었습니다. 예외의 출처와 위치에 관한 정보는 아래의 예외 스택 추적을 사용하여 식별 할 수 있습니다.

스택 추적은 : InsertParameters과 UpdateParameters에 대한

[InvalidCastException: Invalid cast from 'Int32' to 'DateTime'.] 
    System.Int32.System.IConvertible.ToDateTime(IFormatProvider provider) +134 
    System.Convert.ChangeType(Object value, TypeCode typeCode, IFormatProvider provider) +519 
    System.Web.UI.WebControls.Parameter.GetValue(Object value, String defaultValue, TypeCode type, Boolean convertEmptyStringToNull, Boolean ignoreNullableTypeChanges) +126 
    System.Web.UI.WebControls.Parameter.GetValue(Object value, Boolean ignoreNullableTypeChanges) +63 
    System.Web.UI.WebControls.Parameter.get_ParameterValue() +40 
    System.Web.UI.WebControls.ParameterCollection.GetValues(HttpContext context, Control control) +247 
    System.Web.UI.WebControls.ObjectDataSourceView.ExecuteUpdate(IDictionary keys, IDictionary values, IDictionary oldValues) +1440 
    System.Web.UI.DataSourceView.Update(IDictionary keys, IDictionary values, IDictionary oldValues, DataSourceViewOperationCallback callback) +87 
    System.Web.UI.WebControls.DetailsView.HandleUpdate(String commandArg, Boolean causesValidation) +1091 
    System.Web.UI.WebControls.DetailsView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +425 
    System.Web.UI.WebControls.DetailsView.OnBubbleEvent(Object source, EventArgs e) +89 
    System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37 
    System.Web.UI.WebControls.DetailsViewRow.OnBubbleEvent(Object source, EventArgs e) +80 
    System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37 
    System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +121 
    System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +156 
    System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10 
    System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13 
    System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +9642338 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724 
+0

그래서'InvDate'가 데이터베이스에서 잘못 정수로 돌아오고 있는데, 잘못된 열을 선택합니까? –

+0

업데이트/삽입 매개 변수에서 dvInvoice를 여러 번 전달하는 이유는 무엇입니까? 하나의 컨트롤을 사용하여 다른 데이터 유형에 대해 여러 값을 전달했습니다. 이상하게 보입니다. – codingbiz

+0

@Karl, 어디서 볼지에 대해 약간의 혼란이있었습니다. 삽입 및 업데이트와 삽입에 모두 동일한 데이터 소스가 작동합니다. 코드를 단계별로 실행하면 날짜에 대한 사용자 지정 유효성 검사기를 지나치고 (알 수없는 이유로 3 번 유효성 검사기를 실행 함) YSOD가 표시됩니다. 업데이트 방법이 BLL 에까지 미치지도 않습니다. DB에서 읽는 것이 있습니까? – mark1234

답변

1

설정이 잘못되었습니다. ObjectDataSource를에서

, 당신의 컨트롤의 controlid = "dvInvoice"PROPERTYNAME = "SelectedValue". 이 선택된 값은 ID ( DataKeyNames = "ID") 인 DetailsView의 DataKey입니다. 따라서 모든 속성은 ID에서 데이터를 가져 오도록 설정되어 있습니다. 즉, Datetime이 아니라 Int입니다.

자세한 내용은 DetailsView.SelectedValue 속성 here 및 ControlParameter.PropertyName 속성 here을 참조하십시오.

+0

덕분에 많은 도움이되었다. – mark1234