'DDL1'有一个SelectedValue无效,因为它在项目列表中不存在

时间:2013-10-10 19:06:27

标签: asp.net sql vb.net

傍晚,

尝试使用下拉列表更新gridview时,我遇到了上述错误。 但是,这只取决于我如何安排数据集。

以下SQL给出了一个错误:

    "SELECT top 1 M.Title, H.* FROM MASTER AS M
    RIGHT JOIN History AS H
    ON M.TITLE = H.TITLE
    WHERE [Type] < '3'
    order by h.upd_date_time desc"

但是,如果我从脚本中删除'desc',那么网页将正常工作。 作为参考,我使用以下脚本进行DDL:

            <asp:TemplateField HeaderText="Edge 1" SortExpression="Edge1">
            <EditItemTemplate>
            <asp:DropDownList 
             ID="DDL1" runat="server" DataSourceID="OKNGSelect" DataTextField="col1" 
             DataValueField="col1" SelectedValue='<%# Bind("Edge1") %>' AppendDataBoundItems="true">
             <asp:ListItem Text="Select" Value="" />
            </asp:DropDownList>
            </EditItemTemplate>
            <ItemTemplate>
            <asp:Label ID="Label1" runat="server" Text='<%# Bind("Edge1") %>'></asp:Label>
            </ItemTemplate>
            <ItemStyle Wrap="False" />
        </asp:TemplateField>

有没有办法在SQL端修复此问题,因为我需要从历史记录表中自行显示最新记录?我已经尝试从asp页面修复它,但经过对网络的一些广泛研究后,这似乎是一个不常见但非常难以处理的错误。

感谢。

1 个答案:

答案 0 :(得分:0)

以DESC顺序运行查询并查看Edge1列。所有这些值是否与填充DropDownList的查询中的值相匹配?我怀疑没有,并且我想象为什么在排序ASC时没有得到您的异常,因为第一个值DOES与DropDownList中的值匹配。尝试此查询以查看“设置”表中是否存在Edge1不存在的任何行:

SELECT M.Title, H.* 
    FROM MASTER AS M RIGHT JOIN History AS H
        ON M.TITLE = H.TITLE
    WHERE [Type] < '3'
        AND Edge1 NOT IN (SELECT col1 FROM Settings WHERE (col2 = 3) OR (col2 = 4))

我应该指出,在DropDownList你有DataValueField="col1"。既然您在查询中同时提取col1和col2,那么您的意思是col2吗?