2015-01-02 2 views
2

특정 열의 데이터를 숫자로만 제어하려고하지만 DataGrid에 KeyPressed 이벤트가 없다는 문제가 있습니다. 나는의 keyup과에서 KeyDown을 사용하여 시도하지만 또 다른 문제를 가지고 :DataGrid의 숫자 입력

 private void DG1_KeyDown(object sender, KeyEventArgs e) 
    { 
     float f; 
     if (!float.TryParse(((char)e.Key).ToString(),out f)) 
     { 
      e.Handled = false; 
     } 
    }//casting returns an incorrect char value for example NumPad4 returns 'K' 

답변

5

대신 특정 키에 대해 듣는, 쉬운 경로가 TextBoxPreviewTextInput 이벤트를 수신하는 것입니다. 여기에서 새 텍스트가 알파인지 숫자인지를 결정한 다음 올바르게 처리 할 수 ​​있습니다.

private void OnPreviewTextInput(object sender, TextCompositionEventArgs e) 
{ 
    e.Handled = new Regex("[^0-9]+").IsMatch(e.Text); 
} 

각 DataGrid TextBox 열에 대해 설정할 수 있습니다.

숫자 전용 열에 이벤트를 연결하는 것이 더 쉽도록 DataGrid를 수동으로 설계해야 할 수 있습니다. 예 :

<DataGrid ItemsSource="{Binding MyItems}" AutoGenerateColumns="False" > 
    <DataGrid.Columns> 
     <DataGridTemplateColumn Header="NumericOnly"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <TextBox Text="{Binding Number}" PreviewTextInput="OnPreviewTextInput" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 
+0

감사합니다. 매우 도움이되었습니다. – Const