.NETでWinFormアプリをC#で製作中です。
Visual Studio Community 2017を使用しています。
アプリ実行中に、DedaGridViewで複数のセルを選択して文字列を入力した際に、最後に選択したセルだけ入力が反映されます。
この時、他に選択していたセルにも今入力した値を反映させたいと思っています。
そこで検索して出てきたのが全く同じ内容の質問のこちらです。
https://oshiete.goo.ne.jp/qa/7455090.html
こちらでの回答をヒントに試しているのですが‥
具体的にどう記述すれば良いのかが分からず困っています。。
分からないことは大きく二つありまして‥
①CellValueChangedイベント内でまず選択中のセルの値をstring型の変数 s にでも入れておき‥
SelectedCellsでSelectedRowsで選択中の行番号をforeachで List<int> にでも入れていって‥
さらにforeachで List のindexに対応するセルのValueに s を代入する感じでしょうか?
どのような流れで処理するのが良いのでしょうか?
②また、CellValueChangedイベントで記述するとアプリ起動時にCSVに保存していた表データを読み込む際にも処理が走ってしまうようなので、これは表を全て読み込んでからイベントを有効にしたら良
い感じでしょうか。
this.dgv.CellValueChanged -= new DataGridViewCellEventHandler(dgv_CellValueChanged);
このような感じの記述を、Form1のコンストラクタ内に記述しても、Form1_Load内に記述しても、イベントが走ってしまいます。
どのように有効・無効を切り替えれば良いのでしょうか?
アドバイスありましたらぜひお願いします。m(_ _)m
No.1ベストアンサー
- 回答日時:
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (ChangeCancel == false)
{
// 複数選択されていたら処理する
if (dataGridView1.SelectedCells.Count > 1)
{
// 値変更で再帰的に呼び出された時に処理しないようにフラグ設定
ChangeCancel = true;
// 選択セル全部が対象(イベント発行の契機になったセルも含むが無視)
for(int i = 0;i < dataGridView1.SelectedCells.Count;i++)
{
// 選択セルの値をイベント発行のセルの値に設定
dataGridView1.SelectedCells[i].Value = dataGridView1[e.ColumnIndex, e.RowIndex].Value;
}
// 処理終わったのでフラグ解除
ChangeCancel = false;
}
}
}
こんな感じでしょうかね?
②に関してはcsvファイルの読み込み開始時に
ChangeCancel = true;
して、読み込み完了後に
ChangeCancel = false;
とでもすればよいのではないでしょうか?
# 選択セルが2個以上で上記のループが回るので、csv読み込み前に選択セルをキャンセルする…という手もありますけど。
# 起動時以外でcsv読み込みするならば、その手は使えないかも知れませんが。
ちなみに、ChangeCancelは
private bool ChangeCancel;
とでもしてフォームのフィールドにしてください。
Wr5さん、丁寧にご回答いただいてありがとうございます!
できました!!
なるほど、コレクションで取得してforで回して一気に入力してやれば良かったのですね。。
また、イベント自体を有効・無効にするのではなく、中身をifで処理が走る・走らないを切り替えてやれば良かったのですね。。
教えていただくとシンプルな答えなのですが、頭に浮かびませんでした。。
お陰さまでひとつ賢くなりました‥!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
DataGridView 複数行同時変更について
C言語・C++・C#
-
DataGridViewの特定列に入力されている重複チェックをしたい
Visual Basic(VBA)
-
DataGrdViewに関連付けたデータの更新
C言語・C++・C#
-
-
4
C# dataGridViewの値だけクリア
C言語・C++・C#
-
5
DataGridViewでセルクリックイベントを発生させるには
Visual Basic(VBA)
-
6
DataGridViewの各セル幅を自由に決め、その幅で固定したい
Visual Basic(VBA)
-
7
DataGridViewの内容をDBに反映する時
Visual Basic(VBA)
-
8
別フォームから戻ったときのイベント
Visual Basic(VBA)
-
9
DataGridViewのチェックボックスのON、OFFの判定方法
C言語・C++・C#
-
10
DataGridView 列ごとの入力制限
Visual Basic(VBA)
-
11
DataGridViewに空白がある場合はエラーにしたい
Visual Basic(VBA)
-
12
DataTableに入っているデータを全てinsertしたい!(C#)
Microsoft ASP
-
13
DataGridViewの、選択されている行を取り出したい
Visual Basic(VBA)
-
14
CellEnterイベント仕様について
Visual Basic(VBA)
-
15
Loadイベント中にほかのイベントを発生したくない
その他(プログラミング・Web制作)
-
16
C# DataGridView のヘッダーセル中央揃え
C言語・C++・C#
-
17
コンボボックスでドロップダウンリストにしたときに・・・・
Visual Basic(VBA)
-
18
「指定されたキャストは有効ではありません。」とエラーが出てしまいます。
Microsoft ASP
-
19
データグリッドビューの一番最初の行に列を追加したい
Visual Basic(VBA)
-
20
VB.NET DataGridView 縦スクロールバーを常に表示
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA 配列からセルに「...
-
VBAマクロ実行時エラーの修正に...
-
DataGridViewのフォーカス遷移...
-
特定の色のついたセルを削除
-
EXCEL VBA 文中の書式ごと複写...
-
VBA:日付を配列に入れ別セルに...
-
Excelで空白セル直前のセルデー...
-
入力規則のリスト選択
-
VBA 重複文字列 色付け
-
Excel UserForm の表示位置
-
VB2005 DataGridView で選択...
-
EXCEL 2010 VBAでピボットで複...
-
【Excel VBA】一番右端セルまで...
-
色のついたセルの文字を消す
-
CSVファイルを読み込んだらセル...
-
C# DataGridViewで複数選択した...
-
excelで結合セルの場合にエラー...
-
[.Net] DataGridのセルをマージ...
-
【VBA】写真の貼り付けコードが...
-
【ExcelVBA】抽出後の特定の列...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
【Excel VBA】一番右端セルまで...
-
Excel UserForm の表示位置
-
特定の色のついたセルを削除
-
Excelで空白セル直前のセルデー...
-
【VBA】【ユーザーフォーム_Lis...
-
VBA:日付を配列に入れ別セルに...
-
VBA にて、条件付き書式で背景...
-
C# DataGridViewで複数選択した...
-
入力規則のリスト選択
-
Excel VBA IF文がうまく動作し...
-
【VBA】写真の貼り付けコードが...
-
Excel 範囲指定スクショについ...
-
EXCEL VBA 文中の書式ごと複写...
-
Excel VBAでCheckboxの名前を変...
-
EXCEL 2010 VBAでピボットで複...
-
飛び地セルの空白判定
-
エクセルのカーソルを非表示に...
-
CellEnterイベント仕様について
おすすめ情報