C# 主键字段的WPF行验证
我已经研究这个话题好几个小时了,找不到适合我的解决方案 我有一个简单的WPF程序,它使用datagrid显示代码中的对象列表,方式与msdn演示非常相似 我的数据取自SQL数据库,并放入绑定到datagrid的对象列表中,如下所示:C# 主键字段的WPF行验证,c#,wpf,.net-4.0,wpfdatagrid,C#,Wpf,.net 4.0,Wpfdatagrid,我已经研究这个话题好几个小时了,找不到适合我的解决方案 我有一个简单的WPF程序,它使用datagrid显示代码中的对象列表,方式与msdn演示非常相似 我的数据取自SQL数据库,并放入绑定到datagrid的对象列表中,如下所示: public PersonInfo() { InitialiseComponent(); LoadPeopleFromSQL(); } public void LoadPeopleFromSQL() { DataSet ds = GetDa
public PersonInfo()
{
InitialiseComponent();
LoadPeopleFromSQL();
}
public void LoadPeopleFromSQL()
{
DataSet ds = GetDataSet(SQLConnectionString);
List<PersonInfo> personList = new List<PersonInfo>();
foreach(DataRow row in ds.Tables[0].Rows)
{
personList.Add(new PersonInfo(row[0], row[1], row[2]));
}
PersonDataGrid.ItemsSource = personList;
我已设置了一个ValidationRule类,其中包含一个与结构msdn完全匹配的公共重写ValidationResult Validate方法示例:
除了它使用我的“Person”对象而不是“Course”对象之外
public class CourseValidationRule : ValidationRule
{
public override ValidationResult Validate(object value,
System.Globalization.CultureInfo cultureInfo)
{
Course course = (value as BindingGroup).Items[0] as Course;
if (course.StartDate > course.EndDate)
{
return new ValidationResult(false,
"Start Date must be earlier than End Date.");
}
else
{
return ValidationResult.ValidResult;
}
}
}
//Xaml snippet
<DataGrid.RowValidationRules>
<local:CourseValidationRule ValidationStep="UpdatedValue"/>
</DataGrid.RowValidationRules>
但是,我现在要做的是搜索datagrid中的其余项,并检查以确保PersonInfo.ID字段没有重复。我发现这个代码:
但本例要求BindingGroup对象返回datarow,而不是class对象
我注意到BindingGroup对象有一个名为“Owner”的属性,它似乎包含一个datarow。但是,我正在使用.net 4,无法访问“所有者”属性
有人能告诉我如何验证我的主键吗?或者帮助我从.net 4中访问BindingGroup.Owner属性,我相信这会解决我的问题这里的问题是将我的完整“人员”列表从我的主要工作类传输到DataRowValidation类 由于无法找到绑定到DataRow对象的方法,我在DataRowValidation类中放置了一个公共属性,并用我的主类中的当前人员列表填充它:
public class DataRowValidation : ValidationRule
{
public List<PersonInfo> People {get; set;}
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
if (value is BindingGroup)
{
BindingGroup group = (BindingGroup)value;
People = PersonClass.personList;
//Code to loop through list and test for duplicates
}
}
}