DOBON.NET

DataGridのセルに数字のみを入力可能にする

注意:ここで紹介しているDataGridは、System.Windows.Forms名前空間のDataGrid(Windowsフォーム)です。System.Web.UI.WebControls名前空間のDataGrid(Webフォーム)ではありません。

テキストボックスに数字しか入力できないようにする」と同じように、DataGridTextBoxColumn.TextBoxプロパティにより取得したTextBoxオブジェクトにKeyPressイベントハンドラを追加し、そのKeyPressイベントハンドラ内で処理するようにします。なお、「テキストボックスに数字しか入力できないようにする」に記した注意事項も必ずご覧ください。

次の例ではDataGrid1(DataGridオブジェクト)にDataTable1(DataTableオブジェクト、TableName="DataTable1")が連結されており、テーブルスタイルの設定はすでにされているものとし、一列目の列を数字のみ入力できるようにしています。(テーブルスタイルの説明は省かれています。分からないという方はこちらをご覧ください。)

VB.NET
コードを隠すコードを選択
Private Sub Form1_Load(sender As Object, e As System.EventArgs) _
         Handles MyBase.Load
    'テーブルスタイルの取得
    Dim ts As DataGridTableStyle
    ts = DataGrid1.TableStyles("DataTable1")
    
    'DataGridTextBoxColumnの取得
    Dim cs As DataGridTextBoxColumn = _
        CType(ts.GridColumnStyles(0), DataGridTextBoxColumn)
    
    'TextBoxの取得
    Dim tb As TextBox = cs.TextBox
    
    'KeyPressイベントハンドラを追加
    AddHandler tb.KeyPress, AddressOf tb_KeyPress
End Sub

Private Sub tb_KeyPress(sender As Object, e As KeyPressEventArgs)
    '0-9の文字のみを許可する
    If e.KeyChar < "0"c Or e.KeyChar > "9"c Then
        e.Handled = True
    End If
End Sub
C#
コードを隠すコードを選択
private void Form1_Load(object sender, System.EventArgs e)
{
    //テーブルスタイルの取得
    DataGridTableStyle ts;
    ts = DataGrid1.TableStyles["DataTable1"];

    //DataGridTextBoxColumnの取得
    DataGridTextBoxColumn cs =
        (DataGridTextBoxColumn) ts.GridColumnStyles[0];

    //TextBoxの取得
    TextBox tb = cs.TextBox;

    //KeyPressイベントハンドラを追加
    tb.KeyPress += new KeyPressEventHandler(tb_KeyPress);
}

private void tb_KeyPress(object sender, KeyPressEventArgs e)
{
    //0-9の文字のみを許可する
    if (e.KeyChar < '0' || e.KeyChar > '9')
    {
        e.Handled = true;
    }
}

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。
共有する

この記事への評価

この記事へのコメント

この記事に関するコメントを投稿するには、下のボタンをクリックしてください。投稿フォームへ移動します。通常のご質問、ご意見等は掲示板へご投稿ください。