2012-11-16 67 views
0

我有一個datagrid,其中我有數量字段是關閉類型整數。現在我想限制我的用戶只輸入正整數。我不想要一個在datagrid關鍵事件上處理輸入的解決方案。有什麼建議麼?在wpf datagrid中限制用戶輸入爲正整數

這裏是我使用

public class ValueConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { return value; } 

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      if (!OnlyPositiveIntergerAllowed(value.ToString())) 
      { 
       string s = Regex.Replace(value.ToString(), @"[^0-9]+", string.Empty); 

       if(s=="") 
       return 0; 
       else 
        return s; 

      } 
      if (value is string && (string)value == "") 
      { 
       return 0; 
      } 

      return value; 

     } 
     private static bool OnlyPositiveIntergerAllowed(string text) 
     { 
      var regex = new Regex("[^0-9]+"); //regex that matches disallowed text 
      return !regex.IsMatch(text); 
     } 
} 

注意轉換器:(即,如果123dasd其轉換上失去焦點123)它工作正常,但我可以讓用戶輸入(DASD)。

+0

請您可以張貼XAML爲您的DataGrid,所以我可以看到它是如何設置的? –

+0

這裏是xaml lordhusnain

+0

嘗試設置Amount的類型爲uint, t使用任何轉換器綁定 –

回答

0

對於這種情況,您可以使用Extended WPF Toolkit中的DataGridTemplateColumnIntegerUpDown

例子:

  <DataGridTemplateColumn Header="Amount"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <toolkit:IntegerUpDown 
            Minimum="0" 
            Value="{Binding Amount}" 
          /> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 

您還可以使用DecimalUpDown

+0

金額可以在幾千,所以integerupdown不是最好的選擇 – lordhusnain

+0

@ user1825783你的問題是「限制用戶輸入正整數...」,所以IntegerUpDown是不錯的選擇。如果您查看擴展WPF Toollkit文檔,您可以找到DecimalUpDown控件。此控件的用法與IntegerUpDown控件的用法相似。 – kmatyaszek