2011-03-03 5 views
2

저는 WPF에 완전히 익숙하다는 말로 시작하겠습니다. 그러나 저는 20 년의 개발 경험과 5 년의 C# 웹 폼 경험을 가지고 있습니다.WPF DataGrid 셀이 빨간색으로 윤곽이 지정 되었습니까? (Noobie)

DataGrid 컨트롤을 사용하는 WPF 응용 프로그램을 진단하려고합니다.

나는이 applicaiton에서 일어나는 시나리오를 설명하려고 하겠어

.. 여기

는 "오류"를 생산하는 단계입니다. 무슨 일이 일어나고 있는지 알아 내려고 노력 중입니다 :

사용자가 DataGrid 테이블에 행을 추가합니다. 사용자가 첫 번째 열 (수량)을 1로 변경합니다. 사용자가 열을 가로 질러 이동합니다. 커서가 "할인율"열을 지나고 다음 열로 이동합니다. 이 모멘트에서 "Discount Pct"셀은 빨간색으로 윤곽이 나타납니다. "Discount Pct"열이 "고정"될 때까지 다른 셀을 편집 할 수 없습니다. 재미있는 점은 셀을 지우고 동일한 데이터를 입력하면 빨간색이 사라집니다.

필드가 "백분율"필드 (10을 입력하면 셀을 떠날 때 "10 %"가됩니다)이지만 동일한 문제가 다른 필드 (일반 텍스트/varchar) 열.

다른 이상한 일이 내가 발견했습니다 : 사용자가 수량 셀에 아무것도 입력하지 않고, 단지 탭이 바로 모든 컬럼을 통해, 끝으로, 세포 중 어느 것도 빨간색으로하지

합니다.

할인 팩터 셀 (Qty를 입력 했든 아니든)을 클릭하면 (탭 대신) 클릭 한 다음 해당 셀을 클릭하거나 탭으로 놓으면 셀이 빨간색으로 변하지 않습니다.

아이디어가 있습니까? 일부 유형의 셀 유효성 검사가 실패하지만 이러한 특정 상황에서만 왜 발생합니까?

어떻게 진단 하시겠습니까? 어떻게 든 유효성 검사 오류를 표시 할 수 있습니까? (나는 넥타이 할 수있는 처리기가 있어야합니다.) 어쩌면 뭔가 알려줄 것입니다.

생각하십니까? 아이디어? 요청에 따라

추가 코드 : 나는 "EditCell"에 스타일을 적용하는 방법을 생각하고 (다른 사이트에서) 다음 UED

 <DataGrid x:Name="myDataGrid" 
       ItemsSource="{Binding}" 
       CanUserAddRows="False" 
       CanUserDeleteRows="True" 
       CanUserResizeRows="False" 
       SelectionUnit="CellOrRowHeader" 
       ColumnHeaderStyle="{StaticResource lclDataGridColumnHeaders}" 
       RowHeaderStyle="{StaticResource lclDataGridRowHeaders}" 
       CellStyle="{StaticResource lclDataGridCellStyle}" 
       HorizontalGridLinesBrush="LightBlue" 
       VerticalGridLinesBrush="LightBlue" 
       AutoGeneratingColumn="DataGrid_AutoGeneratingColumn" 
       Loaded="DataGrid_Loaded" 
       LoadingRow="DataGrid_LoadingRow" 
       CurrentCellChanged="DataGrid_CurrentCellChanged" 
       CellEditEnding="DataGrid_CellEditEnding"> 
    </DataGrid> 

: 다음

 <Style x:Key="lclDataGridCellEditStyle" TargetType="{x:Type TextBox}"> 
     <Setter Property="BorderThickness" Value="0"/> 
     <Setter Property="Padding" Value="0"/> 
     <Style.Triggers> 
      <Trigger Property="Validation.HasError" Value="true"> 
       <Setter Property="ToolTip" 
         Value="{Binding RelativeSource={RelativeSource Self}, 
           Path=(Validation.Errors)[0].ErrorContent}"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

을, 나는 DataGrid의 EditingElementStyle (코드 숨김)에 할당했다.

유효성 검사 오류가 발생했습니다 (내 의안을 확인). "값 '10 % '을 (를) 변환하지 못했습니다."

사용자가 ".10"을 입력하거나 비슷한 (float/double/decimal/등)을 "%"(char/text로 항목을 처리하지 않음) .

문제는이 행이 DataGrid로 "가져온"(다른 테이블에서 복사 됨) 필드이므로 이미 채워져 있다는 것입니다.그렇다면 어떻게 "값 편집"에 대해 "표시 값"(조건을 던지고 여기에 추측 함)을 받아들이도록 DataGrid를 얻을 수 있습니까?

왜 Qty 셀을 변경 한 다음 탭을 통과 할 때만이 유효성 검사 오류가 발생합니까?

다른 필드에 대한 자세한 내가이 하나를 "해결"일단 나중에 ..., 나는

내가 더 많은 코드를 제공 할 수 있습니다 ...이 솔루션은 유사합니다 생각하지만 많이있다. 나는 필요한 것만주고 싶습니다. 다른 코드 (AutoGeneratingColumn과 같은 매우 기본적인 코드)를 게시 할 수 있다면 알려주십시오!

새 정보 ... Qty가 변경된 후 빨간색 상자가 표시되는 이유는 해당 항목이 유효성 검사를 수행하는 행 변경을 트리거하기 때문입니다. 그리고, 제가 위에서 설명 된 비율 시나리오를 해결하기 위해, 여기 설명 된 바와 같이 나는 "계산기"를 구현해야합니다 같습니다 :이 일을 http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx

또 다른 업데이트 ....

. Percentage 필드에 Converter를 추가했는데 이제는 그 값이 모두 좋다.

나에게 문제가되는 다른 필드는 null을 허용하는 "정수"열입니다. 레코드를 가져올 때 해당 열은 null이지만 DataGridTextColumn은 int가 null이 아니길 원합니다. Null을 허용하도록 설정할 수있는 속성이 있습니까? 아니면 ... 사이에 변환 할 다른 변환기를 수행해야합니까? 널 ... (문자열) 및 int ?? lol

Shayne

+0

표시 할 코드가 있습니까? 도움이 될 것입니다. – itsmatt

+0

'DataGrid'와 사용할 수있는 유효성 확인 코드에 대한 관련 코드를 게시 할 수 있습니까? –

+0

코드가 게시 됨 게시물. :) – Shayne

답변

1

int 유형의 열을 가질 수 있습니까? null을 허용합니다.

+0

네, 그 방법은 내가 AutoGenerateColumns는 데이터베이스 열이 int 타입이고 null이 허용되기 때문에 columm을 "바인딩"한다고 가정합니다. 분명히, 열이 NULLS를 허용해야하는지 여부를 알지 못한다. – Shayne