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

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

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

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

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Q&A

解決済

1回答

2350閲覧

Windowフォームで登録された情報を削除する機能を実装中です

yamaguti

総合スコア185

C#

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

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

0グッド

0クリップ

投稿2017/02/19 09:42

お世話になります。

パスワードを管理するプログラムを実装しており、データグリッドビューのなかで
選択したカラムの情報を削除するところで詰まっています。

エラー 172行
型 'System.ArgumentOutOfRangeException' のハンドルされていない例外が mscorlib.dll で発生しました

追加情報:インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません

C#

1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10using System.Data.SQLite; 11 12namespace WindowsFormsApplication4 13{ 14 public partial class Itiran : Form 15 { 16 public Itiran() 17 { 18 InitializeComponent(); 19 20 } 21 private void btnsintou_Enter(object sender, EventArgs e) 22 { 23 //新規登録ボタンを押下すると登録画面に遷移 24 Touroku Touroku = new Touroku(); 25 Touroku.Show(); 26 this.Visible = false; 27 } 28 private DataTable datatable = new DataTable(); 29 protected override void OnLoad(EventArgs e) 30 { 31 dataGridView1.DataSource = datatable; 32 base.OnLoad(e); 33 DataGridViewCheckBoxColumn column = new DataGridViewCheckBoxColumn(); 34 dataGridView1.Columns.Add(column); 35 } 36 //テーブルの内容を表示 37 private void buttonkensaku_Click(object sender, EventArgs e) 38 { 39 40 //検索条件がない場合 41 if (txtSiteNm.Text == "") 42 { 43 using (SQLiteConnection con = new SQLiteConnection("Data Source = C:\\Users/Desktop/WindowsFormsApplication4 /myfriend.sqlite3")) 44 45 using (SQLiteDataAdapter adapter = new SQLiteDataAdapter("select * from PASS_KANRI where DEL_FLG = 0", con)) 46 { 47 //データグリッドビューのクリア 48 datatable.Clear(); 49 50 dataGridView1.DataSource = datatable; 51 adapter.Fill(datatable); 52 //DataGridのヘッダー文言を指定 53 dataGridView1.Columns[0].HeaderText = "選択"; 54 dataGridView1.Columns[2].HeaderText = "ログインID等"; 55 dataGridView1.Columns[3].HeaderText = "パスワード"; 56 dataGridView1.Columns[4].HeaderText = "登録日"; 57 dataGridView1.Columns[5].HeaderText = "備考"; 58 59 //DELFLGを非表示に 60 dataGridView1.Columns[7].Visible = false; 61 62 //行の幅を自動で調整する 63 dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; 64 } 65 } 66 //検索条件がある場合 67 else 68 { 69 string dbConnectionString = "Data Source = C:\\Users/Desktop/WindowsFormsApplication4 /myfriend.sqlite3"; 70 using (SQLiteConnection cn = new SQLiteConnection(dbConnectionString)) 71 { 72 cn.Open(); 73 using (SQLiteTransaction trans = cn.BeginTransaction()) 74 { 75 SQLiteCommand cmd = cn.CreateCommand(); 76 //SELECT文 77 cmd.CommandText = "SELECT * from PASS_KANRI where SiteNm = @SiteNm and DEL_FLG = 0"; 78 79 //パラメータセット 80 cmd.Parameters.Add("SiteNm", System.Data.DbType.String); 81 82 cmd.Parameters["SiteNm"].Value = txtSiteNm.Text; 83 84 //datatableのクリア 85 datatable.Clear(); 86 //datatableに検索結果をセット 87 datatable.Load(cmd.ExecuteReader()); 88 89 dataGridView1.DataSource = datatable; 90 91 //DataGridのヘッダー文言を指定 92 dataGridView1.Columns[0].HeaderText = "選択"; 93 dataGridView1.Columns[2].HeaderText = "ログインID等"; 94 dataGridView1.Columns[3].HeaderText = "パスワード"; 95 dataGridView1.Columns[4].HeaderText = "登録日"; 96 dataGridView1.Columns[5].HeaderText = "備考"; 97 //DELFLGは非表示に 98 dataGridView1.Columns[7].Visible = false; 99 100 trans.Commit(); 101 cn.Close(); 102 //行の幅を自動で調整する 103 dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; 104 105 } 106 } 107 } 108 } 109 /// <summary> 110 /// 111 /// </summary> 112 /// <param name="sender"></param> 113 /// <param name="e"></param> 114 private void dataGridView1_Validating(object sender, CancelEventArgs e) 115 { 116 117 } 118 119 private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) 120 { 121 //DataGridViewの内容をコピー 122 Clipboard.SetDataObject(dataGridView1.GetClipboardContent()); 123 } 124 125 private void Itiran_Load(object sender, EventArgs e) 126 { 127 128 } 129 130 private void Itiran_KeyDown(object sender, KeyEventArgs e) 131 { 132 //Enterキーでコントロール遷移 133 if (e.KeyCode == Keys.Enter) 134 { 135 if (e.Shift) 136 { 137 ProcessTabKey(false); 138 } 139 else 140 { 141 ProcessTabKey(true); 142 } 143 } 144 } 145 146 private void Delbtn_Click(object sender, EventArgs e) 147 { 148 MessageBox.Show("削除してもよろしいですか?"); 149 foreach (DataGridViewRow r in dataGridView1.Rows) 150 { 151 //チェックがなければ何もしない 152 if (r.Cells[0].Value == null) 153 { 154 155 } 156 //チェックボックスにチェックがある場合のみ処理を実行 157 else if ((bool)r.Cells[0].Value == true) 158 { 159 160 string dbConnectionString = "Data Source = C:\\Users/Desktop/WindowsFormsApplication4 /myfriend.sqlite3"; 161 using (SQLiteConnection cn = new SQLiteConnection(dbConnectionString)) 162 { 163 164 cn.Open(); 165 using (SQLiteTransaction trans = cn.BeginTransaction()) 166 { 167 SQLiteCommand cmd = cn.CreateCommand(); 168 //update文 論理削除 169 cmd.CommandText = "update PASS_KANRI set DEL_FLG = 1 where ID_NO @row"; 170 171 //パラメータ設定 172 cmd.Parameters["row"].Value = r.Cells[0]; 173 174 trans.Commit(); 175 cn.Close(); 176 } 177 } 178 } 179 } 180 } 181 } 182} 183

よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

cmdにパラメータを追加していないのに
cmd.Parameters["row"].Value = r.Cells[0];
とやっているからエラーとなっているのではないでしょうか

投稿2017/02/19 09:57

YAmaGNZ

総合スコア10242

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問