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