Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 主键字段的WPF行验证_C#_Wpf_.net 4.0_Wpfdatagrid - Fatal编程技术网

C# 主键字段的WPF行验证

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

我已经研究这个话题好几个小时了,找不到适合我的解决方案

我有一个简单的WPF程序,它使用datagrid显示代码中的对象列表,方式与msdn演示非常相似

我的数据取自SQL数据库,并放入绑定到datagrid的对象列表中,如下所示:

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
        }
     }
}