2012-07-18 54 views
1

我有一个用户可以添加记录的数据网格。 如果某个项目已经存在,我想滚动到相关的行并突出显示它。访问Silverlight数据网格的特定行(未选中)

我找不到如何枚举datagrid中的行,我知道如何找到可观察集合中的项目,但无法找到如何找到相关行。

此外,重点提示将受到欢迎,我还没有完成动画。

+1

我已经删除了我的答案,因为我指的是WPF。 Silvetlight显然缺少'DataGrid.Items'属性。 – 2012-07-18 22:24:18

回答

1

我创建了一个示例应用程序来检查新添加的项目是否已经存在于数据网格中。如果存在,则选择它并滚动到查看该行。 我没有写入数据网格中不存在新增项目的情况。

<my:DataGrid x:Name="PersonsDataGrid" AutoGenerateColumns="False" Loaded="PersonsDataGrid_Loaded" LoadingRow="PersonsDataGrid_LoadingRow"> 
    <my:DataGrid.Columns> 
    <my:DataGridTextColumn Binding="{Binding FirstName}" Header="First Name"/> 
    <my:DataGridTextColumn Binding="{Binding LastName}" Header="Last Name"/> 
    </my:DataGrid.Columns> 

</my:DataGrid> 

namespace DataGridDemo 
{ 
public partial class MainPage : UserControl 
    { 

private int selectedIndex = 0; 
private DataGridRow selectedRow = null; 
    public MainPage() 
    { 
    InitializeComponent(); 
    Persons = new List<Person>(); 

    Persons.Add(new Person(){FirstName = "Tony1", LastName = "Smith"}); 
    Persons.Add(new Person() { FirstName = "Jennifer1", LastName = "Suze" }); 

    Persons.Add(new Person() { FirstName = "Tony2", LastName = "Smith" }); 
    Persons.Add(new Person() { FirstName = "Jennifer2", LastName = "Suze" }); 

    Persons.Add(new Person() { FirstName = "Tony3", LastName = "Smith" }); 
    Persons.Add(new Person() { FirstName = "Jennifer3", LastName = "Suze" }); 

    Persons.Add(new Person() { FirstName = "Tony4", LastName = "Smith" }); 
    Persons.Add(new Person() { FirstName = "Jennifer4", LastName = "Suze" }); 

    Persons.Add(new Person() { FirstName = "Tony5", LastName = "Smith" }); 
    Persons.Add(new Person() { FirstName = "Jennifer5", LastName = "Suze" }); 

    Persons.Add(new Person() { FirstName = "Tony6", LastName = "Smith" }); 
    Persons.Add(new Person() { FirstName = "Jennifer6", LastName = "Suze" }); 

    Persons.Add(new Person() { FirstName = "Tony7", LastName = "Smith" }); 
    Persons.Add(new Person() { FirstName = "Jennifer7", LastName = "Suze" }); 

    Persons.Add(new Person() { FirstName = "Tony8", LastName = "Smith" }); 
    Persons.Add(new Person() { FirstName = "Jennifer8", LastName = "Suze" }); 

    Persons.Add(new Person() { FirstName = "Tony9", LastName = "Smith" }); 
    Persons.Add(new Person() { FirstName = "Jennifer9", LastName = "Suze" }); 

    Persons.Add(new Person() { FirstName = "Tony10", LastName = "Smith" }); 
    Persons.Add(new Person() { FirstName = "Jennifer10", LastName = "Suze" }); 

    Persons.Add(new Person() { FirstName = "Tony11", LastName = "Smith" }); 
    Persons.Add(new Person() { FirstName = "Jennifer11", LastName = "Suze" }); 

    PersonsDataGrid.ItemsSource = Persons; 
} 


private void PersonsDataGrid_Loaded(object sender, RoutedEventArgs e) 
{ 
    Person newPerson = new Person() { FirstName = "Tony10", LastName = "Smith" }; 

    Person p = (from item in Persons 
       where item.FirstName == newPerson.FirstName && item.LastName==newPerson.LastName 
       select item).FirstOrDefault(); 


    if(p!=null) 
    { 
    selectedIndex = Persons.IndexOf(p); 

    if (selectedIndex >= 0) 
    { 
     //PersonsDataGrid.SelectedIndex = selectedIndex ; - sometimes if selecteditem doesnot work 
     PersonsDataGrid.SelectedItem = p; 
     PersonsDataGrid.Dispatcher.BeginInvoke(() => 
               { 
               PersonsDataGrid.ScrollIntoView(p,null); 
               }); 
    } 
    } 

} 

private void PersonsDataGrid_LoadingRow(object sender, DataGridRowEventArgs e) 
{ 
    DataGridRow row = e.Row as DataGridRow; 

    if (row.GetIndex() == selectedIndex) 
    { 
    selectedRow = row; 
    } 

} 


public List<Person> Persons { get; set; } 
} 

public class Person 
{ 

public string FirstName { get; set; } 

public string LastName { get; set; } 


} 

} 
+0

它的工作原理,但它不会给我访问行元素 – Madd0g 2012-07-20 08:16:11

+0

我编辑我的答案,包括如何获得选定的行 – Ziggler 2012-07-20 17:29:04

相关问题