1

SQLサーバーから日付を選択し、それらをmonthCalendarのBoldedDatesに使用することは可能ですか?:)

monthCalendarのBoldDatesに、次のコードを使用しました。

        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;

これにより、monthCalendar1の3つの日付が太字になります。

しかし、これらの日付をハードコーディングする代わりに、次のような3つの列を含むSQLデータベースから日付を選択したいと思います。

        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

私の最終的な目標は、forinstance Button103を押すことです。その後、2012-04-18&2012-04-23&2012-04-14はmonthCalendarで太字になります。しかし、アレイの専門家はいないので、ここで必要になると思います:/

4

2 に答える 2

0

このようなことを試してください。

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 
        } 
     }
 } 
于 2012-04-21T16:09:43.813 に答える
0

私は同じことを尋ねようとしていたので、この質問に+1を与えましたが、それを行う方法を見つけました。はい、彼が求めていることを行うことは可能です.

配列とコレクションに関するこの記事は役に立ちました。データベースからレコードをフェッチしているときに動的コレクションに項目を追加する方が簡単だと思うので、この例ではジェネリック リストを使用しました。質問に合わせてコードの一部を変更しました。

//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();
   }
}

それはそれを行う方法であり、それを実装するためのより良い方法があると信じていますが、テストしたところ、これは私にとってはかなりうまくいきました.

Listの代わりに固定サイズのArrayを使用する場合は、指定された条件に基づいて (Date) 行の数を返す最初のクエリを実行し、それを配列sizeに設定することもできます。また、返す必要はありません。null 可能なリストですが、私は自分の好みでそれを行いました。乾杯。

于 2014-01-28T07:52:00.127 に答える