2012-07-18 55 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

相關問題