我有一个包含2列(Column1和Column2)和2行的DataGrid(MyDgr)。我可以通过列为我的DataGrid设置验证规则。 例如:对于Column1,所有条目必须为正数,而对于Column2,所有条目必须为< 5。
但是,我还希望能够为每一行设置不同的验证规则。 例如,第一行中的条目只能是整数,而第二行中的条目允许是双精度。
我设置的方式'列验证规则',我为2列创建了2个类
public class Column1ValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
if (value != null)
{
double proposedValue;
if (!double.TryParse(value.ToString(), out proposedValue))
{
return new ValidationResult(false, "'" + value.ToString() + "' is not a real number.");
}
if (proposedValue <= 0)
{
return new ValidationResult(false, "value must be positive.");
}
}
return new ValidationResult(true, null);
}
}
public class Column2ValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
if (value != null)
{
double proposedValue;
if (!double.TryParse(value.ToString(), out proposedValue))
{
return new ValidationResult(false, "'" + value.ToString() + "' is not a real number.");
}
if (proposedValue >= 5)
{
return new ValidationResult(false, "value must be less than 5.");
}
}
return new ValidationResult(true, null);
}
}
在XAML中,我将每个Column与其Corresponding ValidationRule绑定。那部分工作正常。
<DataGrid x:Name="MyDgr" ItemsSource="{Binding}" AutoGenerateColumns="False" CanUserAddRows="False" >
<DataGrid.Columns>
<DataGridTextColumn Header="Column1">
<DataGridTextColumn.Binding>
<Binding Path="Col1" NotifyOnTargetUpdated="True" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay">
<Binding.ValidationRules>
<data:Column1ValidationRule />
</Binding.ValidationRules>
</Binding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
<DataGridTextColumn Header="Column2">
<DataGridTextColumn.Binding>
<Binding Path="Col2" NotifyOnTargetUpdated="True" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay">
<Binding.ValidationRules>
<data:Column2ValidationRule />
</Binding.ValidationRules>
</Binding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
</DataGrid.Columns>
对于DataGrid DataContext,我创建了一个类:
public class Mydata
{
public string Col1 { get; set; }
public string Col2 { get; set; }
}
对于我的2行DataGrid MyDgr,我创建了2个新的Mydata对象实例,我将其添加到可观察的集合中:
var row1 = new Mydata();
var row2 = new Mydata();
ObservableCollection<MyData> dataColl = new ObservableCollection<MyData>();
dataColl.Add(row1);
dataColl.Add(row2);
myDgr.DataContext = dataColl;
但是,我不知道如何制作它以便我的DataGrid中的两行将具有其他不同的验证规则(第一行中的条目只能是整数,而第二行中的条目是允许的是双打,或者我想由Row设置的任何其他验证规则)。 任何帮助都非常感谢!
答案 0 :(得分:0)
您可以实现行级验证,如下所示:
$(document).ready(function(){
var seconds = 0, minutes = 0 , hours = 0;
setInterval(function(){
seconds++;
if(seconds == 60){
minutes++
seconds = 0;
}
if(minutes == 60){
hours++
minutes = 0;
}
console.log(hours, minutes, seconds);
$('#timeTaken').val(`${hours}:${minutes}:${seconds}`);
}, 1000);
});
可以找到here的详细解释。