1

ユーザーがレコードを追加できるデータグリッドがあります。特定のアイテムがすでに存在する場合は、関連する行までスクロールして強調表示します。

データグリッド内の行を列挙する方法がわかりません。監視可能なコレクション内のアイテムを見つける方法は知っていますが、関連する行を見つける方法が見つかりません。

また、ハイライトのヒントは大歓迎です。私はまだアニメーションを作成していません。

4

1 に答える 1

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


} 

}
于 2012-07-19T23:36:20.503 に答える