2016-02-11 44 views
2

以下代碼使DataGridViewColumn4只接受數值和一個十進制點.,它例如工作正常,它接受的值,如(4.50,3.00,13.60)如何做出一定的datagridview列只接受在C#中的數值

但問題是:我仍然可以在單元格內保存小數點(沒有任何數字只是小數點),我不希望單元格只有小數點,因爲sql數據庫(錢列)做不接受只有小數點。

任何人都知道如何防止Column4中的單元格不接受僅小數點,而是接受如下值:(4.50,3.00,13.60)?

請幫忙,謝謝

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 
     e.Control.KeyPress -= new KeyPressEventHandler(AnyColumnKeyPress); 
     if (dataGridView1.CurrentCell.ColumnIndex == 4) //Desired Column 
     { 
      TextBox tb = e.Control as TextBox; 
      if (tb != null) 
      { 
       tb.KeyPress += new KeyPressEventHandler(AnyColumnKeyPress); 
      } 



     } 
    } 

    private void AnyColumnKeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.') 
     { 
      e.Handled = true; 
     } 

     // allow 1 dot: 


     if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1)) 
     { 
      e.Handled = true; 
     } 



    } 
+0

@Fabjan。對不起,我是c#的新手。你能解釋在哪裏使用你的代碼?謝謝 – Kate

+0

凱特你已經解決了這個問題嗎? – Fabjan

+0

@Fabjan,不,我沒有。任何想法? – Kate

回答

1

改變你的函數是:

private void AnyColumnKeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.') 
     { 
      e.Handled = true; 
     } 

     // allow 1 dot: 


     if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1)) 
     { 
      if ((sender as TextBox).Text != ".") { 
       e.Handled = true; 
      } 
     } 



    } 
+0

嗨。我用你的代碼,但沒有改變,仍然是相同的結果。我仍然可以自己輸入點。任何想法? – Kate

0

檢查上面的代碼,我仍然可以進入一個點字符,改變它稍微更可讀的我。

if (!(char.IsControl(e.KeyChar) || char.IsDigit(e.KeyChar)) || e.KeyChar == '.') 
{ 
    e.Handled = true; 
} 

經過測試,我只能輸入數字。

相關問題