質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

1592閲覧

c# datagridviewについて

lcan2940

総合スコア7

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

1グッド

0クリップ

投稿2020/03/05 02:33

編集2020/03/05 03:33

OS:windows
Microsoft Visual studio2019使用
言語 visual C#

同じform内で、簡単なリストを作成したのですが、
DateTimePickerとtextboxの内容を、buttomをクリックすると
datagridviewに反映させたり、削除させたりしたいです。
初心者で!説明が下手で申し訳ないのですが、宜しくお願いします。
追記:修正のご指摘ありがとうございます。
イメージ説明
説明不足及び丸投げのようになってしまい申し訳ありません。行いたい処理は上記図で右側「期限」「やること」に入力した内容を、「登録」を押すとリストに取得、削除を押すとリスト内容の削除、できるようにしたいです。

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/03/05 02:37

説明が下手なのに初心者関係ないレベルです。図で説明してください。
workaholist

2020/03/05 02:41

DataGridViewに行追加、行削除する方法がわからないということですか? DateTimePickerの値の取り方がわからないということですか? TextBoxの値の取り方がわからないということですか? Buttonをクリックした時の処理を書く場所がわからないということですか? Buttonをクリックしたらいろんなことが起こるのですか? Buttonは何個あるのですか? DataGridViewには日付と文字列の2列があるのですか? 「同じform内で、簡単なリストを作成した」とは何ですか?
dodox86

2020/03/05 02:43

内容が「作業丸投げ」のレベルです。誤字("buttom")があったり正確でない記述があって雑な印象を受けるので、このままでは回答が避けられると思います
Zuishin

2020/03/05 04:05

推奨される手順は次のようなものです。 まず完了、期限、やることの各プロパティを持つクラスを作ります。 public class ToDoItem { bool Completed { get; set; } DateTime Deadline { get; set; } string Task { get; set; } } 次にこれを DataGridView にバインドします。 https://qiita.com/lusf/items/dcce573787e808ccb0ea BindingSource がデザイナで表示されているはずなので、ボタンを押した時に新しい ToDoItem を作ってこれに Add するイベントハンドラを作ります。 https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.bindingsource.add?view=netframework-4.8 これで行追加できます。 削除は BindingSource.RemoveCurrent を使ってください。 https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.bindingsource.removecurrent?view=netframework-4.8
Zuishin

2020/03/05 04:09

おそらくここまでするのに迷ったりうまくいかなかったりすると思うので、その時はうまくいかなかったことを具体的に質問してください。この質問は聞いていることが大きすぎます。
lcan2940

2020/03/05 04:48

迅速なご返答ありがとうございます。かなり大きな質問にも関わらず丁寧にお答え頂き、感謝しております。ご説明頂いた通り自分でなんとか進めてみます。
workaholist

2020/03/05 05:58

追加された画像を見る限り、完成しているように見えますが。
guest

回答1

0

ベストアンサー

Zuishinさんの手順にそってざっと作ってみました。
大体のところはデザイナでできます。書いた部分はForm1.csとToDoItem.csです。

cs:ToDoItem.cs

1using System; 2 3namespace Questions245208 4{ 5 public class ToDoItem 6 { 7 public bool Completed { get; set; } 8 public DateTime Deadline { get; set; } 9 public string Task { get; set; } 10 } 11}

cs:Form1.cs

1using System; 2using System.Collections.Generic; 3using System.IO; 4using System.Runtime.Serialization; 5using System.Windows.Forms; 6using System.Xml; 7 8namespace Questions245208 9{ 10 public partial class Form1 : Form 11 { 12 public Form1() 13 { 14 InitializeComponent(); 15 16 if(File.Exists("todo.xml")) 17 { 18 using(var fs = new FileStream("todo.xml", FileMode.Open)) 19 { 20 var serializer = new DataContractSerializer(typeof(List<ToDoItem>)); 21 toDoItemBindingSource.DataSource = serializer.ReadObject(fs); 22 } 23 } 24 } 25 26 private void Add_Click(object sender, EventArgs e) 27 { 28 var item = new ToDoItem 29 { 30 Task = textBox1.Text, 31 Deadline = dateTimePicker1.Value, 32 }; 33 toDoItemBindingSource.Add(item); 34 } 35 36 private void Delete_Click(object sender, EventArgs e) 37 { 38 //toDoBindingSource.RemoveCurrent(); 39 40 foreach(DataGridViewRow row in dataGridView1.SelectedRows) 41 { 42 if(!row.IsNewRow) 43 { 44 dataGridView1.Rows.Remove(row); 45 } 46 } 47 } 48 49 private void Save_Click(object sender, EventArgs e) 50 { 51 using(var xw = XmlWriter.Create("todo.xml", new XmlWriterSettings { Indent = true, })) 52 { 53 var serializer = new DataContractSerializer(typeof(List<ToDoItem>)); 54 serializer.WriteObject(xw, toDoItemBindingSource.List); 55 } 56 } 57 } 58}

cs:Form1.Designer.cs

1namespace Questions245208 2{ 3 partial class Form1 4 { 5 /// <summary> 6 /// 必要なデザイナー変数です。 7 /// </summary> 8 private System.ComponentModel.IContainer components = null; 9 10 /// <summary> 11 /// 使用中のリソースをすべてクリーンアップします。 12 /// </summary> 13 /// <param name="disposing">マネージド リソースを破棄する場合は true を指定し、その他の場合は false を指定します。</param> 14 protected override void Dispose(bool disposing) 15 { 16 if(disposing && (components != null)) 17 { 18 components.Dispose(); 19 } 20 base.Dispose(disposing); 21 } 22 23 #region Windows フォーム デザイナーで生成されたコード 24 25 /// <summary> 26 /// デザイナー サポートに必要なメソッドです。このメソッドの内容を 27 /// コード エディターで変更しないでください。 28 /// </summary> 29 private void InitializeComponent() 30 { 31 this.components = new System.ComponentModel.Container(); 32 this.dataGridView1 = new System.Windows.Forms.DataGridView(); 33 this.Add = new System.Windows.Forms.Button(); 34 this.Delete = new System.Windows.Forms.Button(); 35 this.Save = new System.Windows.Forms.Button(); 36 this.dateTimePicker1 = new System.Windows.Forms.DateTimePicker(); 37 this.textBox1 = new System.Windows.Forms.TextBox(); 38 this.completedColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); 39 this.deadlineColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); 40 this.taskColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); 41 this.toDoItemBindingSource = new System.Windows.Forms.BindingSource(this.components); 42 ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); 43 ((System.ComponentModel.ISupportInitialize)(this.toDoItemBindingSource)).BeginInit(); 44 this.SuspendLayout(); 45 // 46 // dataGridView1 47 // 48 this.dataGridView1.AutoGenerateColumns = false; 49 this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; 50 this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { 51 this.completedColumn, 52 this.deadlineColumn, 53 this.taskColumn}); 54 this.dataGridView1.DataSource = this.toDoItemBindingSource; 55 this.dataGridView1.Location = new System.Drawing.Point(12, 34); 56 this.dataGridView1.Name = "dataGridView1"; 57 this.dataGridView1.RowTemplate.Height = 21; 58 this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; 59 this.dataGridView1.Size = new System.Drawing.Size(604, 404); 60 this.dataGridView1.TabIndex = 0; 61 // 62 // Add 63 // 64 this.Add.Location = new System.Drawing.Point(622, 352); 65 this.Add.Name = "Add"; 66 this.Add.Size = new System.Drawing.Size(80, 40); 67 this.Add.TabIndex = 1; 68 this.Add.Text = "登録"; 69 this.Add.UseVisualStyleBackColor = true; 70 this.Add.Click += new System.EventHandler(this.Add_Click); 71 // 72 // Delete 73 // 74 this.Delete.Location = new System.Drawing.Point(708, 352); 75 this.Delete.Name = "Delete"; 76 this.Delete.Size = new System.Drawing.Size(80, 40); 77 this.Delete.TabIndex = 2; 78 this.Delete.Text = "削除"; 79 this.Delete.UseVisualStyleBackColor = true; 80 this.Delete.Click += new System.EventHandler(this.Delete_Click); 81 // 82 // Save 83 // 84 this.Save.Location = new System.Drawing.Point(622, 398); 85 this.Save.Name = "Save"; 86 this.Save.Size = new System.Drawing.Size(166, 40); 87 this.Save.TabIndex = 3; 88 this.Save.Text = "保存"; 89 this.Save.UseVisualStyleBackColor = true; 90 this.Save.Click += new System.EventHandler(this.Save_Click); 91 // 92 // dateTimePicker1 93 // 94 this.dateTimePicker1.Location = new System.Drawing.Point(623, 62); 95 this.dateTimePicker1.Name = "dateTimePicker1"; 96 this.dateTimePicker1.Size = new System.Drawing.Size(166, 19); 97 this.dateTimePicker1.TabIndex = 4; 98 // 99 // textBox1 100 // 101 this.textBox1.Location = new System.Drawing.Point(624, 105); 102 this.textBox1.Name = "textBox1"; 103 this.textBox1.Size = new System.Drawing.Size(165, 19); 104 this.textBox1.TabIndex = 5; 105 // 106 // completedColumn 107 // 108 this.completedColumn.DataPropertyName = "Completed"; 109 this.completedColumn.HeaderText = "完了"; 110 this.completedColumn.Name = "completedColumn"; 111 this.completedColumn.Width = 50; 112 // 113 // deadlineColumn 114 // 115 this.deadlineColumn.DataPropertyName = "Deadline"; 116 this.deadlineColumn.HeaderText = "期限"; 117 this.deadlineColumn.Name = "deadlineColumn"; 118 // 119 // taskColumn 120 // 121 this.taskColumn.DataPropertyName = "Task"; 122 this.taskColumn.HeaderText = "やること"; 123 this.taskColumn.Name = "taskColumn"; 124 this.taskColumn.Width = 300; 125 // 126 // toDoItemBindingSource 127 // 128 this.toDoItemBindingSource.DataSource = typeof(Questions245208.ToDoItem); 129 // 130 // Form1 131 // 132 this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); 133 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 134 this.ClientSize = new System.Drawing.Size(800, 450); 135 this.Controls.Add(this.textBox1); 136 this.Controls.Add(this.dateTimePicker1); 137 this.Controls.Add(this.Save); 138 this.Controls.Add(this.Delete); 139 this.Controls.Add(this.Add); 140 this.Controls.Add(this.dataGridView1); 141 this.Name = "Form1"; 142 this.Text = "Form1"; 143 ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); 144 ((System.ComponentModel.ISupportInitialize)(this.toDoItemBindingSource)).EndInit(); 145 this.ResumeLayout(false); 146 this.PerformLayout(); 147 148 } 149 150 #endregion 151 152 private System.Windows.Forms.DataGridView dataGridView1; 153 private System.Windows.Forms.Button Add; 154 private System.Windows.Forms.Button Delete; 155 private System.Windows.Forms.Button Save; 156 private System.Windows.Forms.DateTimePicker dateTimePicker1; 157 private System.Windows.Forms.TextBox textBox1; 158 private System.Windows.Forms.BindingSource toDoItemBindingSource; 159 private System.Windows.Forms.DataGridViewCheckBoxColumn completedColumn; 160 private System.Windows.Forms.DataGridViewTextBoxColumn deadlineColumn; 161 private System.Windows.Forms.DataGridViewTextBoxColumn taskColumn; 162 } 163}

投稿2020/03/05 10:56

編集2023/07/21 08:37
TN8001

総合スコア9862

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lcan2940

2020/03/05 11:30

大変詳しい回答誠にありがとうございます。説明不足な部分が多いのにも関わらず、詳細な回答、感謝致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問