저는 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
표시 할 코드가 있습니까? 도움이 될 것입니다. – itsmatt
'DataGrid'와 사용할 수있는 유효성 확인 코드에 대한 관련 코드를 게시 할 수 있습니까? –
코드가 게시 됨 게시물. :) – Shayne