简体   繁体   English

网格视图不会更新数据库(无错误)

[英]grid view won't update database (no errors)

I have a page with a details view and a grid view (each with their own data source. I can't figure out why the update says it's successful but don't update the table. the details view works fine. The grid view is only suppose to show data related to what's in the details view. If I hard code the values in the source it works but when I change it back it blows up. here's my code 我有一个包含详细信息视图和网格视图的页面(每个页面都有各自的数据源。我不知道为什么更新表示成功但不更新表。详细信息视图工作正常。网格视图是仅假设显示与详细信息视图中的内容相关的数据。如果我对源代码中的值进行硬编码,则它可以工作,但是当我将其更改回来时,它会炸毁。这是我的代码

        <asp:SqlDataSource OnUpdated="dsCar_Updated" ID="dsCar" runat="server" 
            ConnectionString="<%$ ConnectionStrings:VehicalList %>" 
            ProviderName="<%$ ConnectionStrings:VehicalList.ProviderName %>" 
            SelectCommand="SELECT Car.* FROM Car WHERE (VIN = ?)" 
            UpdateCommand="UPDATE Car SET [Branch ID] = ?, [State Registration] = ?, [License Plate] = ?, Color = ?, Model = ?, [Car Year] = ?, [Plate Expiration] = ? WHERE (VIN = ?)">
            <SelectParameters>
                <asp:QueryStringParameter Name="?" QueryStringField="VIN" />
            </SelectParameters>
        </asp:SqlDataSource>

<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" 
            DataSourceID="dsCar" Height="50px" Width="265px" CellPadding="4" 
            ForeColor="#333333" GridLines="None" DataKeyNames="VIN" DefaultMode="Edit">
            <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
            <CommandRowStyle BackColor="#E2DED6" Font-Bold="True" />
            <EditRowStyle BackColor="#999999" />
            <FieldHeaderStyle BackColor="#E9ECF1" Font-Bold="True" />
            <Fields>
                <asp:BoundField DataField="VIN" HeaderText="VIN" ReadOnly="True" 
                    SortExpression="VIN" />
                <asp:TemplateField HeaderText="Branch Name" SortExpression="Branch ID">
                    <EditItemTemplate>
                        <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
                            ConnectionString="<%$ ConnectionStrings:VehicalList %>" 
                            ProviderName="<%$ ConnectionStrings:VehicalList.ProviderName %>" 
                            SelectCommand="SELECT * FROM [Branch]"></asp:SqlDataSource>
                        <asp:DropDownList ID="DropDownList1" runat="server" 
                            DataSourceID="SqlDataSource2" DataTextField="Branch Name" 
                            DataValueField="Branch ID" SelectedValue='<%# Bind("[Branch ID]") %>'>
                        </asp:DropDownList>
                    </EditItemTemplate>
                    <InsertItemTemplate>
                        <asp:SqlDataSource ID="SqlDataSource3" runat="server" 
                            ConnectionString="<%$ ConnectionStrings:VehicalList %>" 
                            ProviderName="<%$ ConnectionStrings:VehicalList.ProviderName %>" 
                            SelectCommand="SELECT * FROM [Branch]"></asp:SqlDataSource>
                        <asp:DropDownList ID="DropDownList1" runat="server" 
                            DataSourceID="SqlDataSource3" DataTextField="Branch Name" 
                            DataValueField="Branch ID" SelectedValue='<%# Bind("[Branch ID]") %>'>
                        </asp:DropDownList>
                    </InsertItemTemplate>
                    <ItemTemplate>
                        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                            ConnectionString="<%$ ConnectionStrings:VehicalList %>" 
                            ProviderName="<%$ ConnectionStrings:VehicalList.ProviderName %>" 
                            SelectCommand="SELECT * FROM [Branch]"></asp:SqlDataSource>
                        <asp:DropDownList ID="DropDownList1" runat="server" 
                            DataSourceID="SqlDataSource1" DataTextField="Branch Name" 
                            DataValueField="Branch ID" Enabled="False" SelectedValue='<%# Bind("[Branch ID]") %>'>
                        </asp:DropDownList>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="State Registration" HeaderText="State Registration" 
                    SortExpression="State Registration" />
                <asp:BoundField DataField="License Plate" HeaderText="License Plate" 
                    SortExpression="License Plate" />
                <asp:BoundField DataField="Color" HeaderText="Color" SortExpression="Color" />
                <asp:TemplateField HeaderText="Model" SortExpression="Model">
                    <EditItemTemplate>
                        <asp:SqlDataSource ID="SqlDataSource4" runat="server" 
                            ConnectionString="<%$ ConnectionStrings:VehicalList %>" 
                            ProviderName="<%$ ConnectionStrings:VehicalList.ProviderName %>" 
                            SelectCommand="SELECT * FROM [Model]"></asp:SqlDataSource>
                        <asp:DropDownList ID="DropDownList2" runat="server" 
                            DataSourceID="SqlDataSource4" DataTextField="Model Name" 
                            DataValueField="ModelID" SelectedValue='<%# Bind("Model") %>'>
                        </asp:DropDownList>
                    </EditItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Model") %>'></asp:TextBox>
                    </InsertItemTemplate>
                    <ItemTemplate>
                        <asp:SqlDataSource ID="SqlDataSource4" runat="server" 
                            ConnectionString="<%$ ConnectionStrings:VehicalList %>" 
                            ProviderName="<%$ ConnectionStrings:VehicalList.ProviderName %>" 
                            SelectCommand="SELECT * FROM [Model]"></asp:SqlDataSource>
                        <asp:DropDownList ID="DropDownList2" runat="server" 
                            DataSourceID="SqlDataSource4" DataTextField="Model Name" 
                            DataValueField="ModelID" SelectedValue='<%# Bind("Model") %>' 
                            Enabled="False">
                        </asp:DropDownList>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="Car Year" HeaderText="Car Year" 
                    SortExpression="Car Year" />
                <asp:TemplateField HeaderText="Plate Expiration" 
                    SortExpression="Plate Expiration">
                    <EditItemTemplate>
                        <asp:SqlDataSource ID="SqlDataSource5" runat="server" 
                            ConnectionString="<%$ ConnectionStrings:VehicalList %>" 
                            ProviderName="<%$ ConnectionStrings:VehicalList.ProviderName %>" 
                            SelectCommand="SELECT * FROM [Car]"></asp:SqlDataSource>
                        <asp:Calendar ID="Calendar1" runat="server" 
                            onselectionchanged="Calendar1_SelectionChanged" 
                            VisibleDate='<%# Eval("[Plate Expiration]") %>' 
                            SelectedDate='<%# Bind("[Plate Expiration]") %>'></asp:Calendar>
                        <asp:TextBox ID="txtDateEdit" runat="server" 
                            Text='<%# Bind("[Plate Expiration]") %>'></asp:TextBox>
                        <br />
                    </EditItemTemplate>
                    <InsertItemTemplate>
                        <asp:Calendar ID="Calendar1" runat="server" 
                            onselectionchanged="Calendar1_SelectionChanged" 
                            VisibleDate='<%# Eval("[Plate Expiration]") %>'></asp:Calendar>
                        <asp:TextBox ID="TextBox1" runat="server" 
                            Text='<%# Bind("[Plate Expiration]") %>' Visible="false"></asp:TextBox>
                    </InsertItemTemplate>
                    <ItemTemplate>
                        <br />
                        <asp:Label ID="Label1" runat="server" Text='<%# Eval("[Plate Expiration]") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:CommandField ShowEditButton="True" />
            </Fields>
</asp:DetailsView>

<asp:SqlDataSource OnUpdated="dsMaintance_Updated" ID="dsMaintance" runat="server" 
            ConnectionString="<%$ ConnectionStrings:VehicalList %>" 
            DeleteCommand="DELETE FROM [Maintenance] WHERE [MainteanceID] = ?" 
            InsertCommand="INSERT INTO [Maintenance] ([MainteanceID], [VIN], [Procedure ID], [Date]) VALUES (?, ?, ?, ?)" 
            ProviderName="<%$ ConnectionStrings:VehicalList.ProviderName %>" 
            SelectCommand="SELECT MainteanceID, VIN, [Procedure ID], [Date] FROM Maintenance WHERE (VIN = ?)" 


            UpdateCommand="UPDATE Maintenance SET [Procedure ID] = ?, [Date] = ? WHERE (MainteanceID = ?)">
            <DeleteParameters>
                <asp:Parameter Name="MainteanceID" Type="Int32" />
            </DeleteParameters>
            <InsertParameters>
                <asp:Parameter Name="MainteanceID" Type="Int32" />
                <asp:Parameter Name="VIN" Type="String" />
                <asp:Parameter Name="Procedure_ID" Type="Int32" />
                <asp:Parameter Name="Date" Type="DateTime" />
            </InsertParameters>
            <SelectParameters>
                <asp:QueryStringParameter Name="VIN" QueryStringField="VIN" Type="String" />
            </SelectParameters>
            <UpdateParameters>
                <asp:Parameter Name="MainteanceID" Type="Int32" />
                <asp:Parameter Name="VIN" Type="String" />
                <asp:Parameter Name="Procedure_ID" Type="Int32" />
                <asp:Parameter Name="Date" Type="DateTime" />

            </UpdateParameters>
        </asp:SqlDataSource>


<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
            DataKeyNames="MainteanceID" DataSourceID="dsMaintance" BackColor="White" 
            BorderColor="White" BorderStyle="Ridge" BorderWidth="2px" CellPadding="3" 
            CellSpacing="1" GridLines="None">
            <Columns>
                <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
                <asp:BoundField DataField="MainteanceID" HeaderText="MainteanceID" 
                    InsertVisible="False" ReadOnly="True" SortExpression="MainteanceID" />
                <asp:BoundField DataField="VIN" HeaderText="VIN" SortExpression="VIN" />
                <asp:BoundField DataField="Procedure ID" HeaderText="Procedure ID" 
                    SortExpression="Procedure ID" />
                <asp:BoundField DataField="Date" HeaderText="Date" SortExpression="Date" />
            </Columns>
</asp:GridView>

You should pass the proper parameters to the UpdateParameters section. 您应该将适当的参数传递给UpdateParameters部分。 It looks like you have a copy-paste problem (maybe you copied the section from the InsertParameters section). 看来您有复制粘贴问题(也许您是从InsertParameters部分复制了该部分)。 Your UPDATE statement needs only 3 parameters. 您的UPDATE语句仅需要3个参数。

<asp:SqlDataSource OnUpdated="dsMaintance_Updated" ID="dsMaintance" runat="server" 
        ConnectionString="<%$ ConnectionStrings:VehicalList %>" 
        DeleteCommand="DELETE FROM [Maintenance] WHERE [MainteanceID] = ?" 
        InsertCommand="INSERT INTO [Maintenance] ([MainteanceID], [VIN], [Procedure ID], [Date]) VALUES (?, ?, ?, ?)" 
        ProviderName="<%$ ConnectionStrings:VehicalList.ProviderName %>" 
        SelectCommand="SELECT MainteanceID, VIN, [Procedure ID], [Date] FROM Maintenance WHERE (VIN = ?)"  
        UpdateCommand="UPDATE Maintenance SET [Procedure ID] = ?, [Date] = ? WHERE (MainteanceID = ?)">
        <DeleteParameters>
            <asp:Parameter Name="MainteanceID" Type="Int32" />
        </DeleteParameters>
        <InsertParameters>
            <asp:Parameter Name="MainteanceID" Type="Int32" />
            <asp:Parameter Name="VIN" Type="String" />
            <asp:Parameter Name="Procedure_ID" Type="Int32" />
            <asp:Parameter Name="Date" Type="DateTime" />
        </InsertParameters>
        <SelectParameters>
            <asp:QueryStringParameter Name="VIN" QueryStringField="VIN" Type="String" />
        </SelectParameters>
        <UpdateParameters>
            <%--<asp:Parameter Name="MainteanceID" Type="Int32" />--%>
            <%--<asp:Parameter Name="VIN" Type="String" />--%>
            <asp:Parameter Name="Procedure_ID" Type="Int32" />
            <asp:Parameter Name="Date" Type="DateTime" />   
        </UpdateParameters>
    </asp:SqlDataSource>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM