【问题标题】:Problems with Formview showing details of Gridview selected rowFormview 显示 Gridview 选定行的详细信息的问题
【发布时间】:2016-07-25 15:22:27
【问题描述】:

我试图让用户在此网格视图中选择一行,并在表单视图中显示有关该条目的一组详细信息。目前,我收到错误“无效的列名's.SprayId'”。我遇到了几个问题并且没有想法。我在下面发布了我的代码。关于如何解决这个问题或更好的方法的任何想法?谢谢。

<asp:GridView ID="gvHistory" runat="server" DataSourceID="dsHistory" AllowPaging="True" AllowSorting="True" CellPadding="4" ForeColor="#333333" GridLines="None" DataKeyNames="SprayId">
    <AlternatingRowStyle BackColor="White" ForeColor="#284775"></AlternatingRowStyle>
    <Columns>
        <asp:CommandField ShowSelectButton="True"></asp:CommandField>
    </Columns>
    <EditRowStyle BackColor="#999999"></EditRowStyle>

    <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White"></FooterStyle>

    <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White"></HeaderStyle>

    <PagerStyle HorizontalAlign="Center" BackColor="#284775" ForeColor="White"></PagerStyle>

    <RowStyle BackColor="#F7F6F3" ForeColor="#333333"></RowStyle>

    <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333"></SelectedRowStyle>

    <SortedAscendingCellStyle BackColor="#E9E7E2"></SortedAscendingCellStyle>

    <SortedAscendingHeaderStyle BackColor="#506C8C"></SortedAscendingHeaderStyle>

    <SortedDescendingCellStyle BackColor="#FFFDF8"></SortedDescendingCellStyle>

    <SortedDescendingHeaderStyle BackColor="#6F8DAE"></SortedDescendingHeaderStyle>
</asp:GridView>
<asp:SqlDataSource ID="dsHistory" runat="server" ConnectionString='<%$ ConnectionStrings:WSFConnectionString %>' SelectCommand="SELECT [SprayId], [Date], [TimeStart] FROM [Spray] WHERE ([Date] >= (GETDATE() - 7)) ORDER BY [Date] DESC, [TimeStart] DESC"></asp:SqlDataSource>
<asp:FormView ID="fvHistoryDetail" runat="server" CellPadding="4" ForeColor="#333333" DataSourceID="dsHistoryDetail" DataKeyNames="SprayId">
    <EditItemTemplate>
        SprayId:
        <asp:Label Text='<%# Eval("SprayId") %>' runat="server" ID="SprayIdLabel1" /><br />
        <asp:LinkButton runat="server" Text="Update" CommandName="Update" ID="UpdateButton" CausesValidation="True" />&nbsp;<asp:LinkButton runat="server" Text="Cancel" CommandName="Cancel" ID="UpdateCancelButton" CausesValidation="False" />
    </EditItemTemplate>

    <EditRowStyle BackColor="#999999"></EditRowStyle>

    <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White"></FooterStyle>

    <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White"></HeaderStyle>

    <InsertItemTemplate>
        <asp:LinkButton runat="server" Text="Insert" CommandName="Insert" ID="InsertButton" CausesValidation="True" />&nbsp;<asp:LinkButton runat="server" Text="Cancel" CommandName="Cancel" ID="InsertCancelButton" CausesValidation="False" />
    </InsertItemTemplate>
    <ItemTemplate>
        SprayId:
        <asp:Label Text='<%# Eval("SprayId") %>' runat="server" ID="SprayIdLabel" /><br />

    </ItemTemplate>

    <PagerStyle HorizontalAlign="Center" BackColor="#284775" ForeColor="White"></PagerStyle>

    <RowStyle BackColor="#F7F6F3" ForeColor="#333333"></RowStyle>
</asp:FormView>
<asp:SqlDataSource ID="dsHistoryDetail" runat="server" ConnectionString='<%$ ConnectionStrings:WSFConnectionString %>' SelectCommand="SELECT s.SprayId as 'ID', [Date], TimeStart as 'Time Start', StartLocationDescription as 'Start', EndLocationDescription as 'End', v.VehicleNumber, (a.FirstName + a.LastName) as 'Applicator', c.TradeName as 'Chemical' FROM Spray s join Vehicle v on s.VehicleId = v.VehicleId join Applicator a on s.Applicator1Id = a.ApplicatorId join SprayChemicalsUsed scu on scu.SprayId = s.SprayId join ChemicalsUsed cu on scu.ChemUsedId = cu.ChemUsedId join Chemical c on cu.ChemId = c.ChemId WHERE ([s.SprayId] = @SprayId)">
    <SelectParameters>
        <asp:ControlParameter ControlID="gvHistory" PropertyName="SelectedValue" DefaultValue="1" Name="SprayId" Type="Int32"></asp:ControlParameter>
    </SelectParameters>
</asp:SqlDataSource>

【问题讨论】:

    标签: asp.net vb.net gridview webforms formview


    【解决方案1】:

    问题在于您的选择命令查询:

    SELECT s.SprayId as 'ID', [Date], TimeStart as 'Time Start', StartLocationDescription as 'Start', EndLocationDescription as 'End', v.VehicleNumber, (a.FirstName + a.LastName) as 'Applicator', c.TradeName as 'Chemical' FROM Spray s join Vehicle v on s.VehicleId = v.VehicleId join Applicator a on s.Applicator1Id = a.ApplicatorId join SprayChemicalsUsed scu on scu.SprayId = s.SprayId join ChemicalsUsed cu on scu.ChemUsedId = cu.ChemUsedId join Chemical c on cu.ChemId = c.ChemId WHERE ([s.SprayId] = @SprayId)
    

    列是否存在以及名称是否正确将是首先要检查的内容。

    我会在 SQL 管理查询或您正在使用的任何数据库工具中打开它,并首先让它在那里工作。问题应该很明显,因为 GUI 会突出显示 SQL 语法中的错误。

    【讨论】:

    • 感谢您查看此内容。我在 SQL Management Studio 中编写了该查询,并且没有语法问题。但是,它没有返回所需的数据。相反,我返回的每个列标题都没有任何数据。
    • 我刚刚注意到 dsHistoryDe​​tail 的表单 fvHistoryDe​​tail 数据源将 SprayId 列别名为 ID,并且您在该表单中有“SprayId”的评估
    • 这是真的,但删除或更改别名似乎对手头的问题没有影响。
    • 您是否根据您在 SQLMS 中连接的数据库检查了项目中的连接字符串?是否还有另一个同名的表缺少此 SprayId 列?
    • 您收到的错误消息暗示问题出在数据上,而不是网格视图。
    猜你喜欢
    • 2012-11-17
    • 2011-02-24
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 2016-10-25
    相关资源
    最近更新 更多