从 SQL 到 .Net monthCalendar.BoldDates?
Posted
技术标签:
【中文标题】从 SQL 到 .Net monthCalendar.BoldDates?【英文标题】:From SQL to .Net monthCalendar.BoldDates? 【发布时间】:2012-04-21 15:53:13 【问题描述】:是否可以从 SQL 服务器中选择日期并将它们用于一个月日历中的粗体日期? :)
到 BoldDates in a monthCalendar 我使用了以下代码:
DateTime[] Reserveret = new DateTime[3];
Reserveret[0] = new DateTime(2012, 04, 25);
Reserveret[1] = new DateTime(2012, 04, 01);
Reserveret[2] = new DateTime(2012, 04, 12);
monthCalendar1.BoldedDates = Reserveret;
这将加粗月份Calendar1 中的这三个日期。
但我不想硬编码这些日期,而是想从我的 SQL 数据库中选择它们,其中包含 3 列,如下所示:
ID Room Date
1 103 2012-04-18
2 106 2012-04-07
3 103 2012-04-23
4 103 2012-04-14
5 101 2012-04-11
我的最终目标是按下例如 Button103,然后 2012-04-18 & 2012-04-23 & 2012-04-14 将在月历中加粗。但我不是数组专家,我认为这里需要:/
【问题讨论】:
【参考方案1】:尝试这样的事情。
protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
for (int i = 0; i < Reserveret .Length; i++)
if (e.Day.Date == Reserveret )
e.Cell.Font.Bold = true;
//e.Cell.BackColor = System.Drawing.Color.red; //You may also try this
【讨论】:
哎呀,看不到这段代码是如何工作的。我在 Visual Studio 中开发 C# Windows 应用程序,我认为不可能在一个月日历上执行 Cell.Font.Bold。需要像 MonthCalendar1.BoldedDates 这样的东西...【参考方案2】:我给这个问题+1,因为我正要问同样的问题,但我找到了解决办法,是的,可以按照他的要求去做。
这篇关于Arrays and Collections 的文章帮助了我,我在这个示例中使用了Generic List,因为我认为在我们从数据库中获取记录时将项目添加到动态集合中更容易。我更改了一些代码以匹配问题。
//create a class and paste this.
public class createsCollection
private static SqlConnection getConnection()
SqlConnection con = new SqlConnection();
con.ConnectionString = @"Data Source=yourPCName\SQLEXPRESS;Initial Catalog=..";
return con;
public static List <DateTime?> datesList(string room)
using (var con = new SqlConnection(getConnection().ConnectionString))
SqlDataReader dReader;
List <DateTime?> dates = new List<DateTime?>();
var cad = "SELECT Date from yourTbl where room = @Rn";
using (var sqlCommand = new SqlCommand(cad, con))
try
sqlCommand.CommandType = CommandType.Text
sqlCommand.Parameters.AddWithValue("@Rn", room);
con.Open();
dReader = sqlCommand.ExecuteReader();
if (dReader.HasRows == true)
while (dReader.Read())
dates.Add(DateTime.Parse(dReader["Date"].ToString()));
return dates;
catch (Exception ex)
MessageBox.Show("Error: " + ex.Message);
return null;
在您的表单中:
List<DateTime?> datesLst = new List<DateTime?>();
List<DateTime> notNullableList = new List<DateTime>();
private void Form_Load(object sender, EventArgs e)
datesLst = createsCollection.datesList("103"); //this can be changed e.g Button.Text
//We need to convert the nullable DateTime List 'datesLst' to a non-nullable
//DateTime array in order to pass it to the BoldedDates Property.
if (datesLst != null) //if there were records from the db
foreach (DateTime? dtm in datesLst)
string str = dtm.GetValueOrDefault().ToShortDateString();
DateTime val;
if (DateTime.TryParse(str, out val))
notNullableList.Add(val); //add not-null value to the new generic list
monthCalendar1.BoldedDates = notNullableList.ToArray(); //bold the dates gathered from the db to the Month Calendar
monthCalendar1.Update();
monthCalendar1.UpdateBoldedDates();
这是一种方法,我相信有更好的方法来实现它,但是当我测试它时,这对我来说非常有用。
如果您想使用固定大小的Array 而不是List,您可能需要执行第一个query,它根据指定条件返回(日期)行数并将其设置为数组size,也没有必要返回nullable 列表,但我这样做是我的偏好。干杯。
【讨论】:
以上是关于从 SQL 到 .Net monthCalendar.BoldDates?的主要内容,如果未能解决你的问题,请参考以下文章
使用前端 ASP.net 从 Access db 迁移到 SQL Server 2008