none
日付範囲&名前の検索の仕方 RRS feed

  • 質問

  • DataGridViewに、日付範囲と、名前が一致した一覧を表示させたいのですが、コードがわからないので教えてください。

    データセット名は「業務」としています。データテーブル名は「売上」です。

    DateTimePicker1に最初の日付、

    DateTimePicker2に最終の日付、

    ComboBox1に名前一覧を表示できるようにしてあります。

    Button1を押したら上記の条件で検索できるようにしたいのですが何をどう組み合わせればよいのかわからないです。手持ちの参考書にはDateTimePickerについてあまり詳しく載っておりませんでした。日付の値を取得するには「DateTimePicker_ValueChanged」でするのでしょうか?とにかくどうすればよいものか悩んでいます。お知恵を拝借したいのでよろしくお願いします。

     

    2006年10月22日 5:19

回答

  • DateTimePickerはValue、ComboBoxならSelectedValueで値を取得できます。ValueChangedイベントで検索するよりは、最初の日付、最終の日付、名前を選んだ後、コマンドボタンを押して検索するようにした方が、プログラムの動作として素直だと思います。
    2006年10月22日 6:08
    モデレータ
  • TableAdapterは使ったことがありますか? まずはTableAdapterを作成してみて下さい。この中でselectのSQL文を作成することになります。
    作成した後は、フォームに貼り付けたDataGridViewの右上の小さい三角から、データソースの選択で、TableAdapter作成時に作成したデータテーブルを選択して下さい。自動的に、そのデータテーブルを使用するBindingSourceが生成されて、それがDataGridViewのデータソースになります。

    あとは、検索ボタンを押したら、TableAdapte作成時に作成された選択の関数(デフォルトならFill)に、日付などのパラメータを渡して実行するだけです。この結果、データテーブルが更新され、その結果がDataGridViewに通知されて、DataGridViewはそのデータテーブルの内容で表示されます。

    2006年10月22日 8:55
    モデレータ
  • where (日付 between ? and ?) and 名前 = ?

    という感じになります。検索ボタンを押して、Fill関数を実行する際に、

    Me.table1TableAdapter.Fill(Me.db1DataSet.table1, DateTime.Parse(textBox1.Text), DateTime.Parse(textBox2.Text), textBox3.Text)

    のような感じになるはずです。

    2006年10月22日 13:15
    モデレータ

すべての返信

  • DateTimePickerはValue、ComboBoxならSelectedValueで値を取得できます。ValueChangedイベントで検索するよりは、最初の日付、最終の日付、名前を選んだ後、コマンドボタンを押して検索するようにした方が、プログラムの動作として素直だと思います。
    2006年10月22日 6:08
    モデレータ
  • お返事ありがとうございました。

    色々試したのですが、MonthCalendarを使って、TextBox1に開始日TextBox2に最終日を入れることにしました。TextBoxにそれぞれ値を表示させることはできたのですが、この後どうしてよいかわかりません。

    データベースはAccessを使用しています。

    Private Sub MonthCalendar1_DateChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DateRangeEventArgs) Handles MonthCalendar1.DateChanged
            TextBox1.Text = MonthCalendar1.SelectionStart.ToString("d")
            TextBox2.Text = MonthCalendar1.SelectionEnd.ToString("d")
        End Sub

    ComboBox1の名前を取得したあと、SQL文などを入れたら良いのでしょうか?

    アドバイスお願いします。


     

    2006年10月22日 8:36
  • TableAdapterは使ったことがありますか? まずはTableAdapterを作成してみて下さい。この中でselectのSQL文を作成することになります。
    作成した後は、フォームに貼り付けたDataGridViewの右上の小さい三角から、データソースの選択で、TableAdapter作成時に作成したデータテーブルを選択して下さい。自動的に、そのデータテーブルを使用するBindingSourceが生成されて、それがDataGridViewのデータソースになります。

    あとは、検索ボタンを押したら、TableAdapte作成時に作成された選択の関数(デフォルトならFill)に、日付などのパラメータを渡して実行するだけです。この結果、データテーブルが更新され、その結果がDataGridViewに通知されて、DataGridViewはそのデータテーブルの内容で表示されます。

    2006年10月22日 8:55
    モデレータ
  • お返事ありがとうございます。

    TableAdapterを使ったことあります。検索条件ビルダで作成するんですよね?名前のみで検索とかは、何度も作ったことがあります。もしかして、あの画面で日付範囲&名前で検索できるんですか?

    何もわからないので、一生懸命コードを作ろうとして悩んでいました・・・。

    さっそく、検索条件ビルダで入力しようと思ったのですが、TextBox1に入った日付の値をTextBox1.Textとしたら、エラーメッセージが出て、「TO_DATE関数が必要である可能性があります」と出ました。手持ちの参考書に範囲の指定は、BETWEEN演算子を使うとありましたが、これもうまくいきません。どこがおかしいか教えていただけますか?検索ビルダに以下の文を書きました(エラーで動作しません・・・)

    WHERE           BETWEEN  日付 =   ((TextBox1.[TexT])AND(TextBox2.[TexT]))AND(名前 = 'ComboBox1.[Text]')

     

     

    2006年10月22日 12:09
  • where (日付 between ? and ?) and 名前 = ?

    という感じになります。検索ボタンを押して、Fill関数を実行する際に、

    Me.table1TableAdapter.Fill(Me.db1DataSet.table1, DateTime.Parse(textBox1.Text), DateTime.Parse(textBox2.Text), textBox3.Text)

    のような感じになるはずです。

    2006年10月22日 13:15
    モデレータ
  • trapemiyaさま、お返事ありがとうございました。

    教えていただいた方法できちんと表示することができました。 私の考えていたBETWEENの後に”TextBox1.Text”が、”?”でいいんですね。とても悩んで試行錯誤していたのですが、すんなり表示できて感動です!

    このたびはありがとうございました。またよろしくお願いします。

    2006年10月23日 6:02