none
DataGridViewのセルに数値が入力されているかどうかを判定したい。 RRS feed

  • 質問

  • zen73です。DataGridViewのセルに数値が入力されている(空白)かどうかを判定したいのですが、この判定方法をお教え願います。

    if (Convert.ToInt32(dgv[iCol , iRow].Value) != )

    {

    }

    は、どうかくとよいのでしょうか?

     

    2007年10月7日 0:13

回答

  • zen73 さん、こんにちは

    ダッチです。

     

    数値型の TryParse メソッド を使用すればいいと思います。
    ただし、その数値型の範囲を超えるような場合は数値型として判断されませんが、そこら辺の仕様はどうなっているのでしょうか?

     

    とにかく、数字「0123456789」のみで入力されていればいいのであれば、正規表現を使う手もあると思います。

     

     zen73 さんからの引用
    DataGridViewのセルに数値が入力されている(空白)かどうかを判定したいのですが
    これが本当に空白かどうかを比較したいのであれば、「」には string.Empty なり "" なり、空白を表す値を入れればいいと思います。

     

    それと無条件に Convert.ToInt32 メソッドで数値型に変換していますが、これだと数値以外の値がセルに入っている場合に、例外が発生してしまいます。なので、数値かどうか判定してから 数値に変換するようにしてください。このようなことを TryParse メソッドでは、やってくれます。

    2007年10月7日 1:45
  • zen73 さん、こんにちは。

     zen73 さんからの引用

    数値を入力しなければいけないセルに、数値が入力されているかどうかを判定するその仕方をお尋ねしたかったのです。

    (snip)

    としていますが、数値にしたときに空白かどうかを判定する方法を改めてお尋ねします。

     

    ダッチさんの先の投稿でそれらの回答をすでにされています。
    TryParse メソッドについては調べられていないのでしょうか?


    TryParse メソッドはその型の範囲の数値かどうか (変換できるか) を戻り値で取得できます。
    たとえば、整数しか許されない場合は System.Int32.TryParse メソッドを、浮動小数の場合は System.Double.TryParse メソッを使用します。

    その型によって有効な範囲は変わってきますので、ご注意ください。

    2007年10月7日 7:11
  •  zen73 さんからの引用

    私の質問の仕方がまずかったようです。判定したいセルには0~9までの数字しか入力できない仕組みになってます。それで、いきなりConvert.ToInt32としているわけです。


    であれば、

     

     zen73 さんからの引用

                if (dgv[iCol - 1, iRow].Value.ToString() != string.Empty)

    でいいと思うのですが・・・???

     

     zen73 さんからの引用

    数値にしたときに空白かどうかを判定する方法を改めてお尋ねします。

    ここの意味ががはっきりわからないのですが、もう少し具体的に書いていただけないでしょうか?

    2007年10月7日 7:28
    モデレータ

すべての返信

  • zen73 さん、こんにちは

    ダッチです。

     

    数値型の TryParse メソッド を使用すればいいと思います。
    ただし、その数値型の範囲を超えるような場合は数値型として判断されませんが、そこら辺の仕様はどうなっているのでしょうか?

     

    とにかく、数字「0123456789」のみで入力されていればいいのであれば、正規表現を使う手もあると思います。

     

     zen73 さんからの引用
    DataGridViewのセルに数値が入力されている(空白)かどうかを判定したいのですが
    これが本当に空白かどうかを比較したいのであれば、「」には string.Empty なり "" なり、空白を表す値を入れればいいと思います。

     

    それと無条件に Convert.ToInt32 メソッドで数値型に変換していますが、これだと数値以外の値がセルに入っている場合に、例外が発生してしまいます。なので、数値かどうか判定してから 数値に変換するようにしてください。このようなことを TryParse メソッドでは、やってくれます。

    2007年10月7日 1:45
  • zen73です。ダッチさん、ありがとうございます。

    私の質問の仕方がまずかったようです。判定したいセルには0~9までの数字しか入力できない仕組みになってます。それで、いきなりConvert.ToInt32としているわけです。

    数値を入力しなければいけないセルに、数値が入力されているかどうかを判定するその仕方をお尋ねしたかったのです。

    今のところ、

                if (dgv[iCol - 1, iRow].Value.ToString() != string.Empty)
                {
                    textBox1.Text = "空白ではありません";
                }
                else
                {
                    textBox1.Text = "空白です";
                }

    としていますが、数値にしたときに空白かどうかを判定する方法を改めてお尋ねします。

    どうぞよろしくお願いします。

     

    2007年10月7日 6:02
  • zen73 さん、こんにちは。

     zen73 さんからの引用

    数値を入力しなければいけないセルに、数値が入力されているかどうかを判定するその仕方をお尋ねしたかったのです。

    (snip)

    としていますが、数値にしたときに空白かどうかを判定する方法を改めてお尋ねします。

     

    ダッチさんの先の投稿でそれらの回答をすでにされています。
    TryParse メソッドについては調べられていないのでしょうか?


    TryParse メソッドはその型の範囲の数値かどうか (変換できるか) を戻り値で取得できます。
    たとえば、整数しか許されない場合は System.Int32.TryParse メソッドを、浮動小数の場合は System.Double.TryParse メソッを使用します。

    その型によって有効な範囲は変わってきますので、ご注意ください。

    2007年10月7日 7:11
  •  zen73 さんからの引用

    私の質問の仕方がまずかったようです。判定したいセルには0~9までの数字しか入力できない仕組みになってます。それで、いきなりConvert.ToInt32としているわけです。


    であれば、

     

     zen73 さんからの引用

                if (dgv[iCol - 1, iRow].Value.ToString() != string.Empty)

    でいいと思うのですが・・・???

     

     zen73 さんからの引用

    数値にしたときに空白かどうかを判定する方法を改めてお尋ねします。

    ここの意味ががはっきりわからないのですが、もう少し具体的に書いていただけないでしょうか?

    2007年10月7日 7:28
    モデレータ
  • zen73です。ダッチさん、じゃんぬねっとさん、trapemiyaさん、ありがとうございました。

    次のように確認しました。

                DataGridView dgv = (DataGridView)sender;

                int output;
                if (Int32.TryParse(dgv[iCol-1,iRow].Value.ToString(), out output))
                {
                    textBox1.Text = "空白ではありません";
                }
                else
                {
                    textBox1.Text = "空白です";

    このTryParseは、数値に変換できるかどうかわからないときに使用するようですね。

    私の場合は、数値に変換できることがはっきりしているのですから

                if (dgv[iCol - 1, iRow].Value.ToString() != string.Empty)
    でいいわけですね。

     trapemiya さんからの引用

    ここの意味ががはっきりわからないのですが、もう少し具体的に書いていただけないでしょうか?

    またもや説明不足でした。数値に変換したセルの値を変数に収めておいて、この数値を色々と使いまわしたいものですから、空白かどうかを調べる際にも数値に変換したセルの値で調べたほうが文字列に変換したセルの値で調べるよりも面倒でなくていいと思ったものでした。それで最初の質問になったわけです。

               if(Convert.ToInt32(dgv[iCol-1,iRow].Value)  )

    アのところに、簡単に何かをかいて済ませる方法があるといいのだけれどと思ったのですが、ないのですね。

    みなさん、どうもありがとうございました。

    <追記>

    後で考えてみると、上で私の書いていることに矛盾がありますね。

    TryParseで数値に変換されたoutputを使うと便利になることがわかりました。

    ありがとうございました。重ねて御礼申します。

     

     

     

    2007年10月7日 8:24