我试图在MSDN示例http://msdn.microsoft.com/en-us/library/ee622975(v=vs.110).aspx上为我的数据基础进行一些验证,
XAML码
<DataGrid x:Name="grdQuoteDetail" Height="319" VerticalAlignment="Top" DockPanel.Dock="Top" Margin="0,10,0,0" RowEditEnding="grdQuoteDetailSave" CellEditEnding="grdQuoteDetail_CellEditEnding" AutoGenerateColumns="False">
<DataGrid.RowValidationRules>
<local:CourseValidationRule ValidationStep="UpdatedValue"/>
</DataGrid.RowValidationRules>
<DataGrid.Columns>
<DataGridTextColumn Header="No" Binding="{Binding No , ValidatesOnExceptions=True}" Width="50" />
<DataGridTextColumn Header="Description" Binding="{Binding Description}" Width="*" />
<DataGridTextColumn Header="Total" Binding="{Binding Total}" Width="120" />
</DataGrid.Columns>
</DataGrid>不同的是,我使用一个类来生成datatable,并将网格的项目源设置为它。
CS码
private void genTable()
{
dtQuoteDetail.Columns.Add(new DataColumn("No", Type.GetType("System.Int32")));
dtQuoteDetail.Columns.Add(new DataColumn("Description", Type.GetType("System.String")));
dtQuoteDetail.Columns.Add(new DataColumn("Total", Type.GetType("System.Double")));
DataRow dr = dtQuoteDetail.NewRow();
dr["No"] = 1;
dr["Description"] = "";
dr["Total"] = 0;
dtQuoteDetail.Rows.Add(dr);
grdQuoteDetail.ItemsSource = dtQuoteDetail.DefaultView;
}验证代码
public class CourseValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
tblTesting qt = (value as BindingGroup).Items[0] as tblTesting ; //Return Null
if (qt.No > 10)
{
return new ValidationResult(false, "This Numbe cannot greater than 10");
}
else
{
return ValidationResult.ValidResult;
}
}
}用于tblTesting的类文件
public class tblTesting
{
public int No {get;set;}
public string Description {get;set;}
public double Total {get;set;}
}我要去找NUll
qt
我不知道为什么,任何指导都会感激。
发布于 2014-11-18 14:10:20
因为(value as BindingGroup).Items[0]的类型是'DataRowView',所以它与您的tblTesting类无关。
您可以获得对应于NO属性的第一个单元格的值。
var dataRowView = (value as BindingGroup).Items[0] as DataRowView;
int no = Convert.ToInt32(dataRowView.Row[0]);
if (no > 10)
//do the rest...https://stackoverflow.com/questions/26995618
复制相似问题