나는 DataColumns
세 가지가 들어있는 언 바운드 데이터가있는 DataGridView
이 있습니다. 행은 각 열별로 정렬 될 수 있지만 표시된 데이터를 조작 할 수는 없습니다.현재 표시된 순서로 선택된 DataGridViewRows 가져 오기
SelectedRows
속성을 쿼리 할 때 처음 삽입 된 순서대로 행이 정렬되며 현재 표시된 순서 나 선택한 순서로 예상 한 것과 다릅니다. 이 동작을 변경하는 방법이 있습니까?
나는 DataColumns
세 가지가 들어있는 언 바운드 데이터가있는 DataGridView
이 있습니다. 행은 각 열별로 정렬 될 수 있지만 표시된 데이터를 조작 할 수는 없습니다.현재 표시된 순서로 선택된 DataGridViewRows 가져 오기
SelectedRows
속성을 쿼리 할 때 처음 삽입 된 순서대로 행이 정렬되며 현재 표시된 순서 나 선택한 순서로 예상 한 것과 다릅니다. 이 동작을 변경하는 방법이 있습니까?
나는이 할 수있는 한 줄 방법이 생각하지 않습니다. 정렬을 사용자 고유의 목록으로 다시 실행 한 다음 SelectedItems와 함께 IndexOf를 사용하여 시각적 위치를 찾으십시오.
List<DataGridViewRow> l = new List<DataGridViewRow>();
foreach (DataGridViewRow r in dgv.Rows)
{
l.Add(r);
}
l.Sort((x, y) =>
{
IComparable yComparable = (IComparable)x.Cells[dgv.SortedColumn.Index].Value;
IComparable yc = (IComparable)x.Cells[dgv.SortedColumn.Index].Value;
if (dgv.SortOrder == SortOrder.Ascending)
return yc.CompareTo(yComparable);
else
return yComparable.CompareTo(yc);
}
);
foreach(DataGridViewRow r in dgv.SelectedRows)
{
int selectedIndex = l.IndexOf(r);
}
위의 사항은 컴파일 테스트를 거치지 않았으므로 약간의 조정이 필요할 수 있습니다.
이 같은 선택된 셀의 값을 참조 할 수 있어야한다 :
이Private Sub determinePKVals(ByRef PKVal As String, ByRef PKVal2 As String, Optional ByVal row As Integer = -1)
If row = -1 Then ' optional value not passed
row = dgvDisplaySet.CurrentRow.Index
End If
PKVal = dgvDisplaySet.Rows(row).Cells(0).Value
PKVal2 = dgvDisplaySet.Rows(row).Cells(1).Value
End Sub
SelectedRows 속성에는 선택한 행이 있지만 역순으로 표시되며 가장 최근 항목은 목록의 시작 부분에 있습니다. 올바른 사용자 선택 순서를 얻으려면 다음 코드를 사용하십시오.
List<DataGridViewRow> dgList = new List<DataGridViewRow>();
foreach (DataGridViewRow r in dgv.SelectedRows)
{
dgList.Insert(0, r);
}
foreach(DataGridViewRow r in dgList)
{
//Print/consume your row here.
int selectedIndex = r.Index;
}
참고 : 정렬 할 필요가 없습니다.
동일한 문제가 있습니다.
List<DataGridViewRow> rows =
(from DataGridViewRow row in dgv.SelectedRows
where !row.IsNewRow
orderby row.Index
select row).ToList<DataGridViewRow>();
예 선택한 행을 정렬하려면 가장 짧고 가장 좋은 방법입니다. + 1. 감사합니다. – SajuPK
여기에 위의 코드의 vb.net 버전입니다 : 그것의 가장 짧은 길을 찾습니다.
C#을
List<DataGridViewRow> rows =
(from DataGridViewRow row in dgv.SelectedRows
where !row.IsNewRow
orderby row.Index
select row).ToList<DataGridViewRow>();
VB.NET은
Dim rows As List(Of DataGridViewRow) = (From row As DataGridViewRow
In dgv.SelectedRows Where Not row.IsNewRow Order By row.Index).ToList()
VB.NET 변환기에 C#을 올바르게 번역하지 않습니다.
희망이 VB.NET 코더가 사용하고자하는 희망이.
폴
생성 된 목록을 역으로 사용하면 작동합니다. – xsl
그런 식으로 뭔가 있을지도 모른다고 생각합니다. 반환을 전환했습니다 ... CompareTo 라인. 알려 줘서 고마워. –