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

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

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

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

2回答

3417閲覧

CustomValidatorが動かない

退会済みユーザー

退会済みユーザー

総合スコア0

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2020/07/07 08:29

編集2020/07/07 09:25

###前回の質問
↓「タイトル」GridViewのデータテーブルがnullになってしまう
https://teratail.com/questions/274949

前提・実現したいこと

前回の質問の続きとなります。
まず、前回の質問では、上記のタイトルの通りの質問をし解決いたしました。
今回は、前回使用したGridViewにCustomValidatorを使用してエラーメッセージを出すようにしたいのですが、CustomValidatorが思うように動きません。

MySQLのデータをGridViewを使用して表示しています。
行のデータの選択ボタン押下後、削除ボタン(CommandFieldの削除ボタンではありません)を押したときデータが削除されるようになっています。
ここで、なにも選択せず削除ボタンを押したときにCustomValidatorによりメッセージが出るようにしたいのですが、int selectV = (int)GridView1.SelectedValue;がNullReferenceExceptionを出してしまいます。
Validatorの使用方法が間違っていますでしょうか。
この原因についてご教示お願いいたします。

###エラーの内容

System.NullReferenceException: 'オブジェクト参照がオブジェクト インスタンスに設定されていません。' System.Web.UI.WebControls.GridView.SelectedValue.get が null を返しました。

該当のソースコード

protected void Button2_Click(object sender, EventArgs e) //削除 { int selectV = (int)GridView1.SelectedValue; //主キー(id) var query = "DELETE FROM members WHERE id=@Id"; using (var connection = new MySqlConnection(connString)) { using (var command = new MySqlCommand(query, connection)) { command.Parameters.Add("@Id", MySqlDbType.Int32); command.Parameters["@Id"].Value = selectV; connection.Open(); command.ExecuteNonQuery(); } } GridView1.DataSource = DataCatch(); GridView1.DataBind(); } protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args) { if(GridView1.SelectedValue == null || (int)GridView1.SelectedValue == -1) { args.IsValid = false; } else { args.IsValid = true; } }

補足情報(FW/ツールのバージョンなど)

ASP.NET
VisualStudio2019
C#
.NET Framework4.7.2

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/07/07 09:16 編集

前のスレッド https://teratail.com/questions/274949 の続きというか、それに追加で何かを実装したいのですよね。であれば、質問欄を編集して、最初の方に前のスレッドの URL を書いて(リンクも張ってください)それと関係があること、それにどういう機能を追加したいのかをできるだけ具体的に書いてください。
退会済みユーザー

退会済みユーザー

2020/07/07 09:17

はい。続きになります。確かにその方が分かりやすいですね、編集します。
guest

回答2

0

ベストアンサー

なにも選択せず削除ボタンを押したときにCustomValidatorによりメッセージが出るようにしたいのですが

「なにも選択せず」=「GridView.SelectedIndex プロパティが -1」でいいのですよね?

であれば、CustomValidator などは使わなくても、Button2_Click メソッド内で GridView1.SelectedIndex == -1 だったらエラーメッセージを出して即 return すればよいのではないですか?

投稿2020/07/07 09:38

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2020/07/07 09:56

if文に変更しまして以下の通り記述しましたら思うように動きました! ありがとうございました。 if((int)GridView1.SelectedIndex == -1) { string msg = "alert('行が選択されていません。')"; ClientScript.RegisterClientScriptBlock(GetType(), "key", msg, true); return; }
guest

0

int selectV = (int)GridView1.SelectedValue;がNullReferenceExceptionを出してしまいます。

ということなら、GridView1がnullってことじゃないでしょうか

投稿2020/07/07 08:34

y_waiwai

総合スコア88042

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

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

退会済みユーザー

退会済みユーザー

2020/07/07 09:16

GridView1にはすでに表が表示されているのですがnullになることがあるのでしょうか。
y_waiwai

2020/07/07 09:22

VisualStudioを使ってるならその行で実行を止めて、そこになにが入ってるのか実際に確認してみてはどうでしょう。
退会済みユーザー

退会済みユーザー

2020/07/07 09:58

if文でエラーをキャッチすることにしまして、解決いたしました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問