C#中DataGridView實現某一列只能輸入數字

來源:互聯網
上載者:User

 

最近在開發一個項目時,要求某一列只能夠輸入數字,其它的字元都不接受,Microsoft 沒有提供這個功能,只能自己用代碼實現,在網上找了一下,大多數都在輸入完成後才驗證的。這樣不爽,我這個代碼可以在輸入進就屏蔽了非數位字元。主要是在 EditingControlShowing事件中完成 。看代碼:

 

public DataGridViewTextBoxEditingControl CellEdit = null; // 聲明 一個 CellEdit

 

private void datagridyf_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
       
            CellEdit = (DataGridViewTextBoxEditingControl)e.Control; // 賦值            CellEdit.SelectAll();
            CellEdit.KeyPress += Cells_KeyPress; // 綁定到事件
        }

 

// 自訂事件

 

        private void Cells_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (datagridyf.CurrentCellAddress.X == 2) // 判斷當前列是不是要控制的列 我是控制的索引值為2的 列(即第三列)
            {
                if ((Convert.ToInt32(e.KeyChar) < 48 || Convert.ToInt32(e.KeyChar) > 57) && Convert.ToInt32(e.KeyChar) != 46 && Convert.ToInt32(e.KeyChar) != 8 && Convert.ToInt32(e.KeyChar) != 13)
                {
                    e.Handled = true; // 輸入非法就屏蔽
                }
                else
                {
                    if ((Convert.ToInt32(e.KeyChar) == 46) && (txtjg.Text.IndexOf(".") != -1))
                    {
                        e.Handled = true;
                    }
                }
            }
        }

 

下面是在輸入完成後才驗證的 這個主要是在 CellValidating事件中完成

 

private void datagridyf_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {            if (e.ColumnIndex == datagridyf.Columns["Pric"].Index )
            {
                datagridyf.Rows [e.RowIndex].ErrorText ="";
                int NewVal=0;
                if (!int.TryParse (e.FormattedValue.ToString (),out NewVal ) || NewVal <0)
                {
                    e.Cancel=true ;
                    datagridyf.Rows [e.RowIndex].ErrorText ="價格列只能輸入數字";
                    return ;
                }
            }
        }
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.