Элемент обновления отсутствующего параметра newValues

#asp.net #sql-server #vb.net

#asp.net #sql-сервер #vb.net

Вопрос:

У меня есть formview с несколькими элементами данных, которые отлично работают, за исключением одного параметра, который не будет обновляться вместе с остальными. Для параметра datasource updateparameter formview установлено значение «ничего не делать», чтобы я мог обработать обновление в codebehind. Каждый элемент работает нормально, за исключением одного параметра («цена продажи»), который отсутствует в аргументах OldValues и newValues события ItemUpdating formview. Данные ДЕЙСТВИТЕЛЬНО загружаются в текстовое поле, как и должно быть, правильно отформатированы и все такое.

Я прикрепил html, SQL (для getLoanData()) и исходную часть кода.

Почему каждый параметр должен существовать в аргументах New / oldValue, кроме параметра «цена продажи»? Я пытался заполнить текстовое поле без formatstring, и оно по-прежнему отсутствует. Есть ли что-то в типе данных money SQL, что может вызвать проблему?

HTML:

 <asp:FormView ID="fvLoanDetails" runat="server" DataKeyNames="orderid" 
DataSourceID="sqlLoanDetails" Width="100%">
<ItemTemplate>
    ...
</ItemTemplate>
<EditItemTemplate>
    <table class="orderSectionHeader">
        <tr>
            <td style="padding-left:10px;">
                <h2>Loan Details</h2>
            </td>
            <td style="text-align:right;">    
                <asp:Button ID="btnCancel" runat="server" Text="Cancel" CommandName="Cancel" />
                <asp:Button ID="bvnSave" runat="server" Text="Save" CommandName="Update" />
            </td>
        </tr>
    </table>
    <table class="orderSection">
        <tr>
            <td class="orderHeader" style="vertical-align:top;">
                Loan Number
            </td>
            <td>
                <asp:Label ID="lblLoanNumber" CssClass="orderData" runat="server" 
                    Text='<%# Bind("loannumber") %>' />
            </td>
        </tr>
        <tr>
            <td class="orderHeader">
                Business Channel
            </td>
            <td>
                <asp:DropDownList ID="ddlBusinessChannel" runat="server" 
                    DataSourceID="sqlBusinessChannels" DataTextField="BusinessChannel" 
                    DataValueField="BusinessChannel" SelectedValue='<%# Bind("businesschannel") %>'>
                </asp:DropDownList>                                
                <asp:SqlDataSource ID="sqlBusinessChannels" runat="server" 
                    ConnectionString="<%$ ConnectionStrings:Jade_4 %>" 
                    SelectCommand="SELECT DISTINCT [BusinessChannel] FROM [Loans] ORDER BY [BusinessChannel]">
                </asp:SqlDataSource>                                
            </td>
        </tr>
        <tr>
            <td class="orderHeader">
                Loan Type
            </td>
            <td>
                <asp:DropDownList ID="ddlLoanType" runat="server" 
                    DataSourceID="sqlLoanType" DataTextField="LoanType" 
                    DataValueField="LoanType" SelectedValue='<%# Bind("loantype") %>'>
                </asp:DropDownList>                                
                <asp:SqlDataSource ID="sqlLoanType" runat="server" 
                    ConnectionString="<%$ ConnectionStrings:Jade_4 %>" 
                    SelectCommand="SELECT DISTINCT [LoanType] FROM [Loans] ORDER BY [LoanType]">
                </asp:SqlDataSource>  
            </td>
        </tr>
        <tr>
            <td class="orderHeader">
                Purpose
            </td>
            <td>
                <asp:DropDownList ID="ddlPurpose" runat="server" 
                    SelectedValue='<%# Bind("purpose") %>'>
                    <asp:ListItem Text="Purchase" Value="False" />
                    <asp:ListItem Text="Refinance" Value="True" />
                </asp:DropDownList>              
            </td>
        </tr>
        <tr id="trSalesPrice" runat="server">
            <td class="orderHeader">
                Sales Price
            </td>
            <td>
                <asp:TextBox ID="txtSalesPrice" CssClass="orderData" runat="server" Width="100"
                    Text='<%# Bind("salesprice", "{0:F2}") %>' />
            </td>
        </tr>
        <tr>
            <td class="orderHeader">
                Borrower
            </td>
            <td>
                <table cellspacing="0">
                    <tr style="font-size:8pt;padding-bottom:0px;">
                        <td>First</td><td>Last</td>
                    </tr>
                    <tr>
                        <td>
                            <asp:TextBox ID="txtBFirst" CssClass="orderData" runat="server" Width="80" 
                                Text='<%# Bind("firstname") %>' />
                        </td>
                        <td>
                            <asp:TextBox ID="txtBLast" CssClass="orderData" runat="server" Width="120" 
                                Text='<%# Bind("lastname") %>' />
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
        <tr>
            <td class="orderHeader">
                Borrower Email
            </td>
            <td>
                <asp:TextBox ID="txtEmail" CssClass="orderData" runat="server" Width="200"
                    Text='<%# Bind("email") %>' />
            </td>
        </tr>
        <tr>
            <td class="orderHeader" style="vertical-align:top;">
                Mailing Address
            </td>
            <td>
                <table cellspacing="0">
                    <tr style="font-size:8pt;padding-bottom:0px;">
                        <td colspan="3">Address</td>
                    </tr>
                    <tr>
                        <td colspan="3">
                            <asp:TextBox ID="txtAddress" CssClass="orderData" runat="server" Width="200" 
                                Text='<%# Bind("address") %>' />
                        </td>
                    </tr>
                    <tr style="font-size:8pt;padding-bottom:0px;">
                        <td>City</td><td>State</td><td>Zip</td>
                    </tr>
                    <tr>
                        <td>
                            <asp:TextBox ID="txtCity" CssClass="orderData" runat="server" Width="100"
                                Text='<%# Bind("city") %>' />
                        </td>
                        <td>
                            <asp:TextBox ID="txtState" CssClass="orderData" runat="server" Width="30" 
                                Text='<%# Bind("state") %>' />
                        </td>
                        <td>
                            <asp:TextBox ID="txtZip" CssClass="orderData" runat="server" Width="50" 
                                Text='<%# Bind("zip") %>' />
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
        <tr>
            <td class="orderHeader">
                Borrower Primary
            </td>
            <td>
                <asp:TextBox ID="txtBPhone" CssClass="orderData" runat="server" 
                    Text='<%# Bind("phone1", "{0:(###) ###-####}")%>' />
            </td>
        </tr>
        <tr>
            <td class="orderHeader">
                Borrower Secondary
            </td>
            <td>
                <asp:TextBox ID="txtBCell" CssClass="orderData" runat="server" 
                    Text='<%# Bind("phone2", "{0:(###) ###-####}")%>' />
            </td>
        </tr>
    </table>
</EditItemTemplate>
</asp:FormView>
<asp:SqlDataSource ID="sqlLoanDetails" runat="server" 
    ConnectionString="<%$ ConnectionStrings:Jade_4 %>" 
    SelectCommand="select @orderid as orderid, * from dbo.getLoanData(@orderid)"
    UpdateCommand="select @orderid">
    <SelectParameters>
        <asp:ControlParameter ControlID="hdnOrderID" Name="orderid" 
            PropertyName="Value" DefaultValue="0" />
    </SelectParameters>          
</asp:SqlDataSource>
  

VB.NET:

 Protected Sub fvLoanDetails_ItemUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.FormViewUpdateEventArgs) Handles fvLoanDetails.ItemUpdating

    Dim o As Order = DAL.GetOrderById(hdnOrderID.Value)
    Dim l As Loan = DAL.GetLoanByLoanID(o.LoanID)
    Dim b As Contact = DAL.GetContactById(l.BorrowerContactID)

    l.BusinessChannel = e.NewValues("businesschannel")
    l.LoanType = e.NewValues("loantype")
    l.Purpose = e.NewValues("purpose")
    l.SalesPrice = e.NewValues("salesprice")
    DAL.UpdateLoan(l)

    b.FirstName = e.NewValues("firstname")
    b.LastName = e.NewValues("lastname")
    b.Address = e.NewValues("address")
    b.City = e.NewValues("city")
    b.State = e.NewValues("state")
    b.Zip = e.NewValues("zip")
    b.Phone = e.NewValues("phone1")
    b.Cell = e.NewValues("phone2")
    DAL.UpdateContact(b)

End Sub
  

SQL:

     select 
l.loannumber, l.businesschannel, l.loantype, l.purpose, l.salesprice, b.firstname, b.lastname, b.email, 
b.address, b.city, b.state, b.zip, b.phone as phone1, b.cell as phone2,
dbo.formataddressweb(b.address, '', b.city, b.state, b.zip) as mailingaddress          from loans l 
join orders o on o.orderid=@orderid
join contacts b on l.borrowercontactid=b.contactid
where l.loanid=(select loanid from orders where orderid=@orderid)
  

Комментарии:

1. Я заставил строку таблицы запускаться на стороне сервера, чтобы я мог условно скрыть ее. Это привело к удалению элемента из события ItemUpdating. Я поищу другой способ скрыть / показать строку таблицы.

Ответ №1:

Вы пробовали использовать строку другого формата?

 Text='<%# Bind("salesprice", "{0:C}") %>'