teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

編集

2019/08/03 11:17

投稿

shinami
shinami

スコア334

answer CHANGED
@@ -1,16 +1,81 @@
1
1
  今環境が無いので試していませんが。
2
2
  また、クリックイベントの中で現在の行が削除されるかわかりませんが。
3
3
 
4
+ **編集**
4
- ```
5
+ ``` C#
5
- private void DataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
6
+ public partial class Form1 : Form
6
- {
7
+ {
8
+ private DataTable da = new DataTable();
9
+ private DataColumn col;
10
+ private DataRow row;
11
+ public Form1()
12
+ {
13
+ InitializeComponent();
14
+ }
7
15
 
8
- if(Convert.ToBoolean(DataGridView1.CurrentRow.Cells("チェックボックスの列名").Value))
16
+ private void Form1_Load(object sender, EventArgs e)
9
- {
17
+ {
18
+ DataGridColumn();
19
+ }
20
+
21
+ private void DataGridColumn()
22
+ {
23
+ col = new DataColumn();
24
+ col.ColumnName = "チェック";
25
+ col.DataType = Type.GetType("System.Boolean");
26
+ da.Columns.Add(col);
27
+
28
+ col = new DataColumn();
29
+ col.ColumnName = "日付・時刻";
30
+ col.DataType = Type.GetType("System.String");
31
+ da.Columns.Add(col);
32
+
33
+ col = new DataColumn();
34
+ col.ColumnName = "内容";
35
+ col.DataType = Type.GetType("System.String");
36
+ da.Columns.Add(col);
37
+
38
+ dataGridView1.DataSource = da;
39
+ dataGridView1.AllowUserToAddRows = false;
40
+ dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
41
+ }
42
+
43
+ private void 登録_Click(object sender, EventArgs e)
44
+ {
45
+ if (textBox1.Text != "")
46
+ {
47
+ row = da.NewRow();
48
+ row["チェック"] = false;
49
+ row["日付・時刻"] = dateTimePicker1.Value.ToString();
50
+ row["内容"] = textBox1.Text;
51
+ da.Rows.Add(row);
52
+ }
53
+ else
54
+ {
55
+ MessageBox.Show("テキストボックスに入力されていません。");
56
+ }
57
+ }
58
+
59
+ private void DataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
60
+ {
61
+
62
+ }
63
+
64
+ private void DataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
65
+ {
66
+ if (Convert.ToBoolean(dataGridView1.CurrentRow.Cells["チェック"].Value))
67
+ {
10
- //現在の列のチェクボックスがtrueの時、現在の行を削除
68
+ //現在の列のチェクボックスがtrueの時、現在の行を削除
11
- dataGridView1.Rows.RemoveAt(DataGridView1.CurrentCell.RowIndex);
69
+ dataGridView1.Rows.RemoveAt(dataGridView1.CurrentCell.RowIndex);
12
- }
70
+ }
71
+
72
+ //チェックボックスをクリック後、すぐに削除するにはこれが必要
73
+ if (dataGridView1.CurrentCellAddress.X == 0 && dataGridView1.IsCurrentCellDirty)
74
+ {
75
+ dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
13
- }
76
+ }
77
+ }
78
+ }
14
79
  ```
15
80
 
16
81
  でも、これって間違えてクリックした場合でも確認もなしで削除されますので何か対応をとった方が良いと思います。