C# 将GridView链接到日历

C# 将GridView链接到日历,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我有一个数据库,它运行的列具有DateTime属性。我的想法是抓取该列并将其链接到GridView。然后将日历链接到它,这样我就可以选择一天,所有与数据库列中的日期相同的记录都会显示在GridView中 那么,如何将日历链接到GridView 当前设置 protected void Calendar1_SelectionChanged(object sender, EventArgs e) { //build up a connection and fill th

我有一个数据库,它运行的列具有DateTime属性。我的想法是抓取该列并将其链接到GridView。然后将日历链接到它,这样我就可以选择一天,所有与数据库列中的日期相同的记录都会显示在GridView中

那么,如何将日历链接到GridView

当前设置

    protected void Calendar1_SelectionChanged(object sender, EventArgs e)
    {
        //build up a connection and fill the gridview
        SqlConnection conn;
        SqlCommand comm;
        SqlDataReader reader;
        string connectionString = ConfigurationManager.ConnectionStrings["LoginProject"].ConnectionString;
        conn = new SqlConnection(connectionString);
        comm = new SqlCommand("FillGridByCalendar", conn);
        comm.CommandType = CommandType.StoredProcedure;
        comm.Parameters.AddWithValue("@UserId", System.Data.SqlDbType.UniqueIdentifier);
        comm.Parameters.AddWithValue("@Firstname", System.Data.SqlDbType.NVarChar);
        comm.Parameters.AddWithValue("@Lastname", System.Data.SqlDbType.NVarChar);
        comm.Parameters.AddWithValue("@UserLoginPerDay", System.Data.SqlDbType.DateTime);

        try
        {
            conn.Open();
            reader = comm.ExecuteReader();
            GridView2.DataSource = reader;
            GridView2.DataBind();
            reader.Close();
        }
        catch (Exception ex)
        {
            dbErrorLabel.Text = Convert.ToString(ex);
        }

        finally
        {
            conn.Close();
        }
}
和(改变的)程序

ALTER PROCEDURE [dbo].[FillGridByCalendar] 
@UserLoginPerDay datetime,
@Firstname nvarchar,
@Lastname nvarchar,
@UserId uniqueidentifier
@datefilter -- Not sure what to add here 
AS
BEGIN
SELECT UserLoginToday.UserId, Gebruikers.Lastname, Gebruikers.Firstname, UserLoginToday.UserLoginPerDay 
FROM Gebruikers INNER JOIN UserLoginToday 
ON Gebruikers.UserId = UserLoginToday.UserId 
WHERE (UserLoginToday.UserLoginPerDay = ISNULL(@datefilter, UserLoginToday.UserLoginPerDay))
END

我知道您希望按日期对GridView应用过滤。您可以使用SqlDataSource来实现这一点。演示如何将过滤应用于GridView的示例性文章(使用下拉菜单完成,但使用日历时非常类似):


欢迎来到Stack Overflow…嗯…donger

在这里您会得到很好的响应和建议,但是您应该尝试包含您尝试过的任何代码。这里的人希望看到您已经尝试了一些东西,如果我们可以看到您的代码,它可以帮助我们诊断您的问题

编辑:我已经添加了一些细节-而且,您不需要在日历控件上自动回写

假设您已经准备好了sql数据源,您只需要添加一些东西

在数据源的selectcommand中,您需要添加以下内容

WHERE yourtable.nameofdatefield = ISNULL(@datefilter, yourtable.nameofdatefield)
CancelSelectOnNullParameter="false"
所以它看起来像这样

SelectCommand="SELECT stuff FROM yourtable WHERE yourtable.nameofdatefield = ISNULL(@datefilter, yourtable.nameofdatefield)"  
<SelectParameters>
                            <asp:ControlParameter Name="datefilter" ControlID="yourcalendarid" PropertyName="SelectedValue" />
                        </SelectParameters>
<asp:SqlDataSource ID="yoursqldatasourceid" runat="server" 
                        ConnectionString="<%$ ConnectionStrings:nameofyourconnection %>" 
                        DeleteCommand="you may or may not be deleting things" 
                        InsertCommand="you may or may not be inserting things" 
                        UpdateCommand="you may or may not be deleting things"
                        SelectCommand="SELECT stuff FROM yourtable WHERE yourtable.nameofdatefield = ISNULL(@datefilter, yourtable.nameofdatefield)" 
                        CancelSelectOnNullParameter="false"                        
                        >
                        <SelectParameters>
                            <asp:ControlParameter Name="datefilter" ControlID="yourcalendarid" PropertyName="SelectedValue" />
                        </SelectParameters>
                        <DeleteParameters>
                            <asp:Parameter Name="id" Type="Int32" />
                        </DeleteParameters>
                        <InsertParameters>
                            some insert parameters that you may or may not need...
                        </InsertParameters>
                        <UpdateParameters>
                            some update parameters that you may or may not need...
                        </UpdateParameters>
                    </asp:SqlDataSource>
<asp:Calendar ID="Calendar1" runat="server" OnSelectionChanged="Calendar1_SelectionChanged" ></asp:Calendar>
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
    yoursqldatasourceid.databind();
}
在您的命令之后,您需要添加此

WHERE yourtable.nameofdatefield = ISNULL(@datefilter, yourtable.nameofdatefield)
CancelSelectOnNullParameter="false"
在sqldatasource的参数部分,添加以下内容

<asp:ControlParameter Name="datefilter" ControlID="yourcalendarid" PropertyName="SelectedValue" />
所以这里的一切都应该是这样的

您的数据源应该如下所示

SelectCommand="SELECT stuff FROM yourtable WHERE yourtable.nameofdatefield = ISNULL(@datefilter, yourtable.nameofdatefield)"  
<SelectParameters>
                            <asp:ControlParameter Name="datefilter" ControlID="yourcalendarid" PropertyName="SelectedValue" />
                        </SelectParameters>
<asp:SqlDataSource ID="yoursqldatasourceid" runat="server" 
                        ConnectionString="<%$ ConnectionStrings:nameofyourconnection %>" 
                        DeleteCommand="you may or may not be deleting things" 
                        InsertCommand="you may or may not be inserting things" 
                        UpdateCommand="you may or may not be deleting things"
                        SelectCommand="SELECT stuff FROM yourtable WHERE yourtable.nameofdatefield = ISNULL(@datefilter, yourtable.nameofdatefield)" 
                        CancelSelectOnNullParameter="false"                        
                        >
                        <SelectParameters>
                            <asp:ControlParameter Name="datefilter" ControlID="yourcalendarid" PropertyName="SelectedValue" />
                        </SelectParameters>
                        <DeleteParameters>
                            <asp:Parameter Name="id" Type="Int32" />
                        </DeleteParameters>
                        <InsertParameters>
                            some insert parameters that you may or may not need...
                        </InsertParameters>
                        <UpdateParameters>
                            some update parameters that you may or may not need...
                        </UpdateParameters>
                    </asp:SqlDataSource>
<asp:Calendar ID="Calendar1" runat="server" OnSelectionChanged="Calendar1_SelectionChanged" ></asp:Calendar>
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
    yoursqldatasourceid.databind();
}

如果您仍然迷路,请告诉我,我们可以解决它…

您好,谢谢您的回复。是否可以使用存储过程而不是SQLDataSource来执行此操作?我对这些很不熟悉。但是如果需要的话我会试一试。sqldatasource非常简单,但是如果你不想尝试,你能编辑你的原始问题来展示你目前是如何做的吗?如何检索数据?如果你想尝试sqldatasource,这段3分钟的视频会告诉你如何。。。我在我的帖子中添加了我的当前情况,我不被允许使用SQLDataSource,因为这会使其他必须从事此项目的人感到困惑,因为所有其他语句都存储在数据库中的过程中。ok-add comm.Parameters.AddWithValue(“@datefilter”,System.Data.SqlDbType.DateTime);在sqlcommand中,如果您说“不确定要在此处添加什么”,请将datetime