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

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

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

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

Q&A

解決済

3回答

3256閲覧

c# 非表示の行 すべて再表示

svntall

総合スコア0

C#

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

0グッド

0クリップ

投稿2021/11/25 03:09

編集2021/11/26 05:43

c#で非表示の行を再表示したくプログラムを考えましたがうまくいきません。
e.RowIndexで赤い波線がでてエラーとなってしまいます。

private void buttonRestore_Click(object sender, EventArgs e) { // 非表示の行を再表示 DataGridViewCheckBoxCell cell = (DataGridViewCheckBoxCell)dataGridView1[0, e.RowIndex]; if (cell.Value.ToString() == "False") { dataGridView1.Rows[e.RowIndex].SetValues(false); dataGridView1.Rows[e.RowIndex].Visible = true; }

e.RowIndexはdatagridviewのメソッドの中でしか使うことができないのでしょうか?

ボタンをクリックすることで、非表示にしたものを再表示する場合どのようなプロパティを使えばよいか検討がつかないので、ヒントをいただければ幸いです。

ーーーーーーーーーーーーーー
開発環境 visual studio 2022
OS: windows11
.NET framwork Windows form application

ーーーーーーーーーーーーーー

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/11/25 03:15

情報不足です。せめて何を作っているか(WinForms? WPF? その他?)と開発環境(OS, Visual Studio のバージョン、Core か .NET Framework どっちかとそのバージョンなど)ぐらいは書きましょう。
svntall

2021/11/25 03:19

失礼しました!追記させていただきます!
退会済みユーザー

退会済みユーザー

2021/11/25 03:25

何を作っているか(WinForms? WPF? その他?)と開発環境(OS, Visual Studio のバージョン、Core か .NET Framework どっちかとそのバージョンなど)をお聞きしておるのですが? たぶん聞かれても分からなくて答えられないのであろうと想像してますが、そこは調べてください。
退会済みユーザー

退会済みユーザー

2021/11/25 03:33

質問に追記したのは、 > 開発環境 visual studio > OS: windows11 ですけど、何を作っているか(WinForms? WPF? その他?)、Visual Studio のバージョン、Core か .NET Framework どっちかとそのバージョンは分からないのですか?
BeatStar

2021/11/25 05:44

まず、C#では、CLI (コンソール系), Windows Forms, WPF`… といろんな種類が作れます。果てにはWeb系もできるようです。(試したことないけど) それぞれできる範囲が違ったり、作法自体も違ったりします。なのでどういうものを作っているかも書いた方がいいです。 それと、C#でできるのは C#が提供しているのではなく、.NET Frameworkや.NET Coreといったものが提供しています。C#は『クラス』や『for文』等の構造を提供しているだけです。 その.NET Frameworkとかのバージョンによっては使えるメソッドと使えないメソッドに極端な差が出ます。 なのでそういう情報はちゃんと出しましょう。
svntall

2021/11/25 06:24

なるほど!改めて追記します!
退会済みユーザー

退会済みユーザー

2021/11/25 06:48

buttonRestore_Click で特定の行だけ再表示したいのですか、それとも非表示になっているすべての行を再表示したいのですか?
svntall

2021/11/26 04:57 編集

返信ありがとうございます。 非表示になっている行すべてを再表示しようとしております。
退会済みユーザー

退会済みユーザー

2021/11/25 07:00

> 非表示になっている行すべてを再表示しようとしております! buttonRestore_Click で特定の行だけ再表示したいわけではなく、非表示になっているすべての行を再表示したいということを、質問欄を編集して追記願います。
退会済みユーザー

退会済みユーザー

2021/11/25 07:20

以下のようにしたらどうなりますか? 未検証ですが、試してみてください。 foreach (var row in dataGridView1.Rows) { ((DataGridViewRow)row).Visible = true; }
svntall

2021/11/25 07:34 編集

返信ありがとうございます。! いただいたコードで非表示にしていた行を再表示することができました 記述方法、大変勉強になりました。ありがとうございます!
退会済みユーザー

退会済みユーザー

2021/11/25 07:43

解決したようで何よりです。ところで消す方は問題なかったのでしょうか? 先頭に ▶ が表示されている行を消そうとすると例外がスローされると思うのですが・・・
svntall

2021/11/25 07:59

消す方というのは、非表示ということでしょうか? 行の非表示再表示に関しましては、問題なく動いております!
svntall

2021/11/26 04:56 編集

すいません! ▶の意味がやっとわかりました。こちらの ▶を非表示にしていたようです。 >先頭に ▶ が表示されている行を消そうとすると例外がスローされると思うのですが・・・ →問題なく動作します。ありがとうございます!
退会済みユーザー

退会済みユーザー

2021/11/25 23:19

質問者さん、解決したそうですので、このスレッドはクローズ願います。ご自分で解答欄に解決した方法・コードを書いて、それにマークをつけることでクローズできます。
svntall

2021/11/26 00:24

了解しました!
guest

回答3

0

自己解決

下のコードを書くことで動作します。

foreach (var row in dataGridView1.Rows) { ((DataGridViewRow)row).Visible = true; }

投稿2021/11/26 00:26

編集2021/11/26 04:53
svntall

総合スコア0

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

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

0

まず、プログラミングは『こう書けばいい』というものではありません。ロジックを書くのです。

今回の場合、e とはなんなのかを考える必要があります。

今回のコードの周辺で、一番距離的に近い(厳密にはスコープが)と思われる、buttonRestore_Clickメソッド(イベント)の第二引数 EventArgs e のことですね。

では、このEventArgs とは何者でしょうか。

公式によると、イベント用のクラスですね。

では、このクラスが本当にRowIndexとやらを持っているでしょうか?
公式のやつをそのまま読むと、…やっぱり無いようですね。

なので『使えません』。ない袖は振れないので。

多分、今回は『選択されているセルの行を〜』とかそういうアレだと思います。その場合は、EventArgs で取得するのではなく、DataGridView等の対象コントロールに聞けばいいはずです。(彼らが管理しているので)

同じく、DataGridViewを公式リファレンスで調べて、DataGridViewCheckBoxCell が返すようならDataGridViewCheckBoxCellの方でさらに調べて…というふうにしてください。

投稿2021/11/25 06:59

編集2021/11/25 07:01
BeatStar

総合スコア4962

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

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

svntall

2021/11/25 07:30

> では、このクラスが本当にRowIndexとやらを持っているでしょうか? 公式のやつをそのまま読むと、…やっぱり無いようですね。 なので『使えません』。ない袖は振れないので。 ーーーーーー 確かに公式のレファレンスには載っていないようです。 そこをしっかり確認して質問すべきでした! 申し訳ございません。指摘していただきありがとうございます。
guest

0

eの型はEventArgsです
それにはRowIndexってメンバはないですね.

投稿2021/11/25 03:13

編集2021/11/25 03:13
y_waiwai

総合スコア88042

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

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

svntall

2021/11/25 03:23

なるほど。イベントデータが格納されているクラスだからbuttonのメソッドには使用できないという解釈であってますか?
y_waiwai

2021/11/25 03:28

そのイベントデータがあなたの想定している使い方ができない、ってだけのはなしです。 ふつーにつかえますよ
svntall

2021/11/25 06:31

ありがとうございます! button などでe.RowIndexを定義することもできないということですね
y_waiwai

2021/11/25 07:24

そもそもButtonなのに、どこをどうやったらRowIndexなるものが出てくるんでしょうか
svntall

2021/11/26 04:54 編集

たしかにそうですね。 datagridviewと同じように使っておりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問