前提・実現したいこと
データベースにdateカラムのデータを呼び出したときに、その日付のデータをリストボックス(カレンダー)に出力させたい。
発生している問題・エラーメッセージ
リストボックス1ではなく、3/17などの名前をリストボックスにつけられるのでしょうか? もしくは、dateカラムのデータをintに変換などをして各リストボックスに振り分けることはできるのでしょうか?
該当のソースコード
C#
1 private void button1_Click(object sender, EventArgs e) 2 { 3 var date = new DateTime(); 4 5 cn.ConnectionString = cnstr; 6 cn.Open(); 7 8 cmd.Connection = cn; 9 cmd.CommandType = CommandType.Text; 10 cmd.CommandText = "SELECT * FROM [dbo] . [Table]"; 11 12 rd = cmd.ExecuteReader(); 13 while (rd.Read()) 14 { 15 16 17 name = Convert.ToString(rd["名前"]); 18 date = Convert.ToDateTime(rd["日付"]); 19 20 21 listBox2.Items.Add(name); 22 listBox3.Items.Add(date); 23 24 25 26 27 } 28 rd.Close(); 29 cn.Close(); 30 } 31 32//追記させていただきました。 33using System; 34using System.Collections.Generic; 35using System.ComponentModel; 36using System.Data; 37using System.Drawing; 38using System.Linq; 39using System.Text; 40using System.Threading.Tasks; 41using System.Windows.Forms; 42using System.Data.SqlClient; 43 44namespace WindowsFormsApp4 45{ 46 public partial class Form1 : Form 47 { 48 private SqlConnection cn = new SqlConnection(); 49 private SqlCommand cmd = new SqlCommand(); 50 private SqlDataReader rd; 51 private String cnstr = @"Data Source=(LocalDB)\MSSQLLocalDB;" + @"AttachDbFilename=|DataDirectory|\Schedule2.mdf;" + "Integrated Security = True; Connect Timeout = 30"; 52 private string name = ""; 53 private DateTime date = new DateTime(2000, 1, 1); 54 private string task = ""; 55 56 readonly List<ListBox> listBoxs; 57 58 public Form1() 59 { 60 InitializeComponent(); 61 62 listBoxs = new List<ListBox> 63 { 64 null, 65 listBox1, 66 listBox2, 67 listBox3, 68 listBox4, 69 listBox5, 70 listBox6, 71 listBox7, 72 listBox8, 73 listBox9, 74 listBox10, 75 listBox11, 76 listBox12, 77 listBox13, 78 listBox14 79 }; 80 } 81 82 private void button1_Click(object sender, EventArgs e) 83 { 84 85 cn.ConnectionString = cnstr; 86 cn.Open(); 87 88 cmd.Connection = cn; 89 cmd.CommandType = CommandType.Text; 90 cmd.CommandText = "SELECT * FROM [dbo] . [Table]"; 91 92 rd = cmd.ExecuteReader(); 93 while (rd.Read()) 94 { 95 name = Convert.ToString(rd["名前"]); 96 date = Convert.ToDateTime(rd["日付"]); 97 task = Convert.ToString(rd["タスクネーム"]); 98 99 if (name == "A") 100 { 101 var listBox = listBoxs[ListBoxItems]; 102 //listBox.Items.Add = task; 103 } 104 105 } 106 rd.Close(); 107 cn.Close(); 108 } 109 110 private int ListBoxItems 111 { 112 113 get 114 { 115 //if (date ==3,1 ) return 1; 116 117 return 0; 118 } 119 } 120 } 121}
試したこと
dateカラムデータを変数に代入できたので計算できればと思ったのですが計算方法がうまくいきませんでした。
リストボックスにdate形式の名前をつけることはできるのでしょうか。
よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
Microsoft Visual Studio Community 2019
Version 16.5.0
.NET Framework version 4.8.03752
質問には一週間分のコントロールしかないんですが、画面のデザインの仕方から聞いていますか?
完成予定は人数の方が増える予定なので一週間1ページで表示させたいと思っています。
画面のデザインのいい方法がありましたらよろしければ教えていただけたらありがたいです。
ではリストボックスに日付の名前をつけてはいけません。
表示する一週間の始めの日と終わりの日を求め、それを元にデータベースから範囲内のデータを読み取り、それを振り分けてください。リストボックスは配列に入れるのが易しいのではないかと思います。
例えば始めの日が 3/1 であった場合、最初のリストボックスにな 3/1 のデータを、次のリストボックスには 3/2 のデータを入れます。具体的にはデータベースから取得した日付から 3/1 を引いたものを日数に直し、0 になるものを最初に、1 になるものを次に入れます。
それができるようになったらデータバインディングというもう少し保守性の高い方法もあります。通常はこちらの方法を選択します。
追記させていただきました。
コメント部分になっている場所がエラーになってしまい
listboxの配列化がうまくいってないのと、if文でdateの比較がintとの比較になってしまいうまくいきません。
方向性はあってるのでしょうか?
https://teratail.com/questions/250262
同じ質問のようですが、同じ人ですか?
違います。HTMLとJavaScriptは現在の段階で使用する予定はありません。
現在作成しようとしているのはローカルデータベースを使用してローカルの状態で
使用できる予定表を作成するつもりでした。
自分のレベルが低くせっかく回答いただいても解決できていない状態にあるため基礎を身に着ける為の質問に変更させていただこうと思います。
改めて質問させていただきたいのでよろしければ回答いただければ幸いです。
この質問はこのまま、わからないところを新しく質問してください。私は回答するとは限りませんが、適切な具体性を持った質問であれば誰か回答すると思います。
あなたの回答
tips
プレビュー
