搜索gridview asp.net

时间:2015-04-21 17:22:32

标签: asp.net gridview

在我的asp.net程序中进行日期范围搜索时出现以下错误。

  

从字符转换日期和/或时间时转换失败   串

这是搜索的代码。请帮忙。我还想在网格视图中仅显示日期而不显示日期和时间。

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"
        AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="SqlDataSource2">
        <Columns>
            <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" ReadOnly="True"
                SortExpression="ID" />
            <asp:BoundField DataField="Story_number" HeaderText="Story_number" SortExpression="Story_number" />
            <asp:BoundField DataField="Date" HeaderText="Date" SortExpression="Date" />
            <asp:BoundField DataField="Memory_card" HeaderText="Memory_card" SortExpression="Memory_card" />
            <asp:BoundField DataField="Story_Name" HeaderText="Story_Name" SortExpression="Story_Name" />
        </Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:IngestConnectionString %>"
        SelectCommand="SELECT ID, Story_number, Date, Memory_card, Story_Name FROM Library WHERE (Story_Name LIKE '%' + @Story_Name + '%') AND (Story_number LIKE '%' + @Story_number + '%')   AND (@startDate IS NULL OR Date >= @startdate) AND (@enddate IS NULL or Date <= @enddate)">
        <SelectParameters>
            <asp:ControlParameter ControlID="TextBox1" Name="Story_Name" PropertyName="Text"
                DefaultValue="%" />
            <asp:ControlParameter ControlID="TextBox2" DefaultValue="%" Name="Story_number" PropertyName="Text" />
            <asp:ControlParameter ControlID="TextBox3" DefaultValue="" Name="startdate" PropertyName="Text" />
            <asp:ControlParameter ControlID="TextBox4" Name="enddate" DefaultValue="" PropertyName="Text" />
 </asp:SqlDataSource>

2 个答案:

答案 0 :(得分:1)

您不应将%标记附加到您的日期。这是一个通配符运算符,仅适用于LIKE表达式。

你只需要

(Date BETWEEN @startdate AND @enddate)

过滤到日期范围。

要允许空日期,您必须切换到布尔逻辑,而不是使用之间:

(@startDate IS NULL OR Date >= @startdate) AND (@enddate IS NULL or Date <= @enddate)

答案 1 :(得分:0)

以下代码解决了将null传递给数据库的问题。

CancelSelectOnNullParameter="False"

下的代码
<asp:SqlDataSource ID="SqlDataSource2" runat="server"
        CancelSelectOnNullParameter="False"
        ConnectionString="<%$ ConnectionStrings:IngestConnectionString %>"
        SelectCommand="SELECT ID, Story_number, Date, Memory_card, Story_Name FROM Library WHERE (Story_Name LIKE '%' + @Story_Name + '%') AND (Story_number LIKE '%' + @Story_number + '%') AND (@startdate IS NULL OR @startdate = '' OR Date >= @startdate) AND (@enddate IS NULL OR @enddate = '' OR Date <= @enddate)">
            <SelectParameters>