2011-07-30 8 views
2

어떻게 DataGrid에서 행 인덱스를 선택 하시겠습니까?DataGrid (wpf)에서 행 인덱스 선택

이 이벤트는 다음 코드는 작동하지 않습니다

을 인 selectionchanged :

 private DataGridRow dgr = new DataGridRow(); 

    private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 

     this.dgr = this.dataGrid.ItemContainerGenerator.ContainerFromItem(this.dataGrid.SelectedItem) as DataGridRow; 
     MessageBox.Show(this.dgr.GetIndex().ToString()); 

    } 

답변

3

이유 왜 WPF 데이터 그리드 가상화하고는 반환하지 수 있기 때문에 작동하지 않을 것입니다 코드는 위 행이 itemContainerGenerator.ContainerFromItem을 사용하여 스크롤 뷰 외부에있을 수 있으므로

이렇게하려면 선택한 항목을 사용하여 DataGrid의 항목 모음과 IndexOf 호출을 사용해야합니다.

private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     var dg = sender as DataGrid; 
     MessageBox.Show(dg.Items.IndexOf(dg.SelectedItem).ToString()); 
    } 
+0

오류 : 개체 참조가 개체의 인스턴스로 설정되지 않았습니다. – mrJack

+0

dg가 null의 경우는 대신에 this.dataGrid를 사용합니다. dg.SeletedItem가 null의 경우는 그 체크를 실시해, null가 아닌 경우는 인덱스를 돌려줍니다. –

+0

정답 : var dg = DataGrid.CurrentItem as DataRowView; MessageBox.Show (dg [0] .ToString()); – mrJack

2

내 대답은 늦었지 만 검색 엔진에서이 게시물을 발견 한 사람들에게 유용 할 것으로 기대합니다. 이는 선택된 모든 행의 색인을 정의하는 데 도움이되는보다 일반적인 솔루션입니다.

List<int> RowIndexes = new List<int>(); 
int SelectedItemsCount = yourDataGrid.SelectedItems.Count; 
    for (int i = 0; i < SelectedItemsCount ; i++) 
      { 
       RowIndexes.Add(yourDataGrid.Items.IndexOf(yourDataGrid.SelectedItems[i])); 
      } 

이제 RowIndexes에는 선택한 행의 모든 ​​색인이 포함됩니다. 원하는 이벤트 안에 코드를 넣으면됩니다.

1

이것은 늦은 답변이지만,이 방법을 수행 한 것입니다. 이것은 (dgQuery 내 데이터 그리드의 이름입니다) DataGrid에 당신에게 모든 선택된 행의 인덱스를 제공합니다

foreach (var selection in dgQuery.SelectedItems) 
{ 
     DataRowView row = (DataRowView)item; 

     int index = Convert.ToInt32(row.Row[0]) - 1; 
} 

그것은 인덱스 0에서 1을 제공합니다, 그래서 우리는 모든 인덱스에 1을 뺄 필요가있다.

.Row[0] DataRowView의 열 (내 머리 부분)은 왜 행이라고 불렀는지 확실하지 않습니다. 해당 행에있는 다른 셀을 보려면 [1], [2] 등으로 변경할 수 있습니다.

이 솔루션을 사용하면 콜렉션, 배열, 그 종류의 것이 필요하지 않습니다. 현재 진행중인 작업을 수행하고 기존 코드를 사용하면됩니다.

적어도이 구현의 큰 장점은 선택한 항목을 선택한 순서대로 통과한다는 것입니다. 사용자의 선택 순서를 알고 싶다면 매우 유용한 도구가 될 수 있습니다.

방금 ​​해결책을 찾기 위해 4 시간 이상을 보냈기 때문에 게시하고 있습니다. 나는 그 것들을 잘 구현하기위한 충분한 시간이 없기 때문에 체크 박스를 포기했다. 아마 길을 잃을지도 모른다.