none
MonthCalendarの値と、dbのテーブルの値とを関連付けさせたい RRS feed

  • 質問

  • データベースのテーブルには、日付(datetime型)があります。

    これと、カレンダーを関連付けさせたいと思います。

    やりたい事の詳細

    • カレンダーの日付をクリックすると、テーブルのレコードを表示する。
    • テーブルのレコードを選択すると、カレンダーの日付はテーブルの日付にジャンプする。

    他にも、細かいところはあるでしょうが、主だった動きは以上です。

    どの様にしたら出来ますか。

    以上、よろしくお願いします。

    2011年3月24日 7:08

回答

  • URLにある説明どおりだと、日付カラムのコントロールはDateTimePickerになると
    思います、まずこれをMonthCalenderコントロールに変えます。

    データソースウィンドウにある、日付のカラムの右のほうにある
    ドロップダウンを展開し「DateTimePicker」が選択されていると重いますが、
    ここで「カスタマイズ」を選択します。
    リストの中にある「MonthCalender」にチェックを入れてOKを押します。
    もう一度データソースウィンドウにある、日付のカラムの右のほうにある
    ドロップダウンを展開すると、「MonthCalender」が増えているので、これを選択。
    あとは、すでに配置済みの日付カラムの詳細コントロールである「DateTimePicker」
    と、そのラベルを削除し、データソースウィンドウの日付カラムの項目を再び
    ドラッグ&ドロップでフォームへもっていけば、「MonthCalender」として配置
    されます。

    これだけだと、まだお望みの動作にはなりませんので、次にデータグリッドと
    カレンダーコントロールに、以下の各イベントを追加します。
    以下は前提条件として、データグリッドのカラム[2]番目に対象の日付カラムがあるとし、
    データソースウィンドウのドラッグドロップで生成されたコントロール名を
    データグリッドをDataGridView1とし、カレンダーをMonthCalendar1とします。
    書き方は色々あるかと思いますが、一例としてみてください。

    // MonthCalenderのDateSelectedイベント
    {
      DataGridView1.CurrentRow.Cells[2].Value = MonthCalendar1.SelectionStart;
    }
    
    // DataGridViewのCellValueChangedイベント
    {
      if (DataGridView1.IsHandleCreated)
      {
        if (e.ColumnIndex == 2)
        {
          MonthCalendar1.SelectionStart = (DateTime)DataGridView1.CurrentRow.Cells[2].Value;
        }
      }
    }
    
    • 回答としてマーク taokato 2011年3月29日 1:25
    2011年3月28日 2:51

すべての返信

  • >カレンダーの日付をクリックすると、テーブルのレコードを表示する。
    >テーブルのレコードを選択すると、カレンダーの日付はテーブルの日付にジャンプする。

    以下の意味ですか?
    カレンダーの日付をクリックすると、テーブルのレコードを<更新>する。
    テーブルのレコードを<更新>すると、カレンダーの日付はテーブルの日付にジャンプする。

    それとも、何か別のデータベースのGUIアプリか何かの表示と連動させたいということですか?
    表示・選択、という言葉が、どういった意味を持つのかイメージできませんでした。

    2011年3月24日 8:14
  • カレンダーの日付をクリックすると、テーブルのレコードを表示する。

    MonthCalendarのDateSelectedイベントが発生しますので、そのイベントハンドラでテーブルのレコードを表示するようにします。 

    テーブルのレコードを選択すると、カレンダーの日付はテーブルの日付にジャンプする。

    レコードを選択した後に、MonthCalendarのSelectionStartプロパティとSelectionEndプロパティを使って、MonthCalendarの日付をセットします。

    大筋は以上のようなことだと想像しますが、間違っていたら忌憚なくご指摘ください。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年3月24日 13:21
    モデレータ
  • 前提条件として、作業の進捗履歴を記録するためのデータです。

    >以下の意味ですか?
    >カレンダーの日付をクリックすると、テーブルのレコードを<更新>する。

    <更新>というのが、「レコードにジャンプする」or「レコードを追加する」という意味ならYesです。


    >テーブルのレコードを<更新>すると、カレンダーの日付はテーブルの日付にジャンプする。

    はい。テーブルの日付と同じくして、カレンダーの日付にカーソル(?)も移動したいと思います。

     

    以上、よろしくお願いします。

    2011年3月25日 1:29
  • すいません、私の聞き方が悪かったです。
    タイトルには、「MonthCalendarの値と、dbのテーブルの値とを関連付けさせたい」
    とありますので、イメージ的には、例えばSQLServer等のDBMSの、特定のテーブルの
    値と、C#.NETで作成したフォームアプリケーションのMonthCalenderコントロールの
    選択値とを、双方向で連動させたい、というように解釈してますがあってますか?

    その上で、
    >カレンダーの日付をクリックすると、テーブルのレコードを表示する。
    >テーブルのレコードを選択すると、カレンダーの日付はテーブルの日付にジャンプする。

    「テーブルのレコードを表示」「テーブルのレコードを選択」とありますが、
    「テーブルのレコード」といえば、DBMSの行データの事かと思うのですが、それを表示や
    選択するということは、そのデータをどういう方法かによって可視化してるはずです。
    例えばフォーム上のDataGridViewにデータをバインドしてるとか。
    そこら辺がちょっとわからなかったので質問してました。
    それで「表示」ではなく「更新」なのかな?と思った次第です。
    「テーブルのレコード」がDBMSのデータの事ではない場合は、DataTableオブジェクト関連?
    それとも何かのDBツール上でのGUIの話?
    どういう環境でどういうことをやりたいのか、全体像が上手く理解できていません。

    2011年3月25日 5:47
  • 説明不足だったようで、済みません。

     

    >タイトルには、「MonthCalendarの値と、dbのテーブルの値とを関連付けさせたい」
    >とありますので、イメージ的には、例えばSQLServer等のDBMSの、特定のテーブルの
    >値と、C#.NETで作成したフォームアプリケーションのMonthCalenderコントロールの
    >選択値とを、双方向で連動させたい、というように解釈してますがあってますか?

    合ってます。

    可視化の方法については、この記事に従っています。

    http://www.atmarkit.co.jp/fdotnet/special/win20review02/win20review02_01.html

    >それで「表示」ではなく「更新」なのかな?と思った次第です。
    クエリを、使っていませんので「更新」になるのではないでしょうか。

    全体像としては、上記のURLに「誕生日」がありますので、カレンダーと連動させたいと思います。

    顧客マスター・メンテナンス画面」で山田太郎を指し示していますよね。

    この時、カレンダーのカーソルも、1960/01/01を指し示して欲しい。

    逆に、C#のコードから「誕生日」欄を更新したいと思います。

    2011年3月28日 1:38
  • URLにある説明どおりだと、日付カラムのコントロールはDateTimePickerになると
    思います、まずこれをMonthCalenderコントロールに変えます。

    データソースウィンドウにある、日付のカラムの右のほうにある
    ドロップダウンを展開し「DateTimePicker」が選択されていると重いますが、
    ここで「カスタマイズ」を選択します。
    リストの中にある「MonthCalender」にチェックを入れてOKを押します。
    もう一度データソースウィンドウにある、日付のカラムの右のほうにある
    ドロップダウンを展開すると、「MonthCalender」が増えているので、これを選択。
    あとは、すでに配置済みの日付カラムの詳細コントロールである「DateTimePicker」
    と、そのラベルを削除し、データソースウィンドウの日付カラムの項目を再び
    ドラッグ&ドロップでフォームへもっていけば、「MonthCalender」として配置
    されます。

    これだけだと、まだお望みの動作にはなりませんので、次にデータグリッドと
    カレンダーコントロールに、以下の各イベントを追加します。
    以下は前提条件として、データグリッドのカラム[2]番目に対象の日付カラムがあるとし、
    データソースウィンドウのドラッグドロップで生成されたコントロール名を
    データグリッドをDataGridView1とし、カレンダーをMonthCalendar1とします。
    書き方は色々あるかと思いますが、一例としてみてください。

    // MonthCalenderのDateSelectedイベント
    {
      DataGridView1.CurrentRow.Cells[2].Value = MonthCalendar1.SelectionStart;
    }
    
    // DataGridViewのCellValueChangedイベント
    {
      if (DataGridView1.IsHandleCreated)
      {
        if (e.ColumnIndex == 2)
        {
          MonthCalendar1.SelectionStart = (DateTime)DataGridView1.CurrentRow.Cells[2].Value;
        }
      }
    }
    
    • 回答としてマーク taokato 2011年3月29日 1:25
    2011年3月28日 2:51