시나리오 다음을 수행하는 방법 :정렬 DataTable의 행
1.rowa
2.rowab
3.row
4 : 일부 행 예를 들어이 들어 약간의 DataTable을 한 .rowaba
...
n. rowabba
행을 이름이 아닌 길이별로 정렬하는 방법. 나는 필드의 길이별로 표를 정렬하려고한다.
시나리오 다음을 수행하는 방법 :정렬 DataTable의 행
1.rowa
2.rowab
3.row
4 : 일부 행 예를 들어이 들어 약간의 DataTable을 한 .rowaba
...
n. rowabba
행을 이름이 아닌 길이별로 정렬하는 방법. 나는 필드의 길이별로 표를 정렬하려고한다.
당신은 할 열 값을 일으키는 원인이되는 len()
함수를 호출을 포함하는 식을 공급하여 DataTable
에 여분의 열을 추가 할 수 있습니다를 자동 계산 :
table.Columns.Add("LengthOfName", typeof(int), "len(Name)");
그런 다음 당신은 단순히 종류의 UI 컨트롤의 어떤 종류의 그리드에 DataTable
바인딩하기 전에 새 열에서 사용하려는 수 : 동의 해요
table.DefaultView.Sort = "LengthOfName";
은이어야하며 DataTable
을 사용해야하는 경우 정렬을위한 추가 열을 도입 할 수 있습니다. - 두 클래스의 개인적
DataTable table = new DataTable();
DataColumn val = table.Columns.Add("Value", typeof(string));
table.Rows.Add("abc");
table.Rows.Add("defgh");
table.Rows.Add("i");
table.Rows.Add("jklm");
// sort logic: ***** schou-rode's "len(...)" approach is better *****
DataColumn sort = table.Columns.Add("Sort", typeof(int));
foreach (DataRow row in table.Rows) {
row[sort] = ((string)row[val]).Length;
}
DataView view = new DataView(table);
view.Sort = "Sort";
foreach (DataRowView row in view) {
Console.WriteLine(row.Row[val]);
}
, 내가 입력 된 목록을 사용하십시오 :이 경우 새 열을 기준으로 정렬 단순히 원하는 각 셀의 길이로 열의 값을 설정하고, 수 또는이 경우 문자열 (당신은 단지 하나 개의 값 목록 이후) :
List<string> list = new List<string> {
"abc", "defgh", "i", "jklm"};
list.Sort((x, y) => x.Length.CompareTo(y.Length));
foreach (string s in list) {
Console.WriteLine(s);
}
이
"len (Name)"을 좋아합니다 - 얼마나 자주 DataTable을 사용하는지 보여줍니다. .. +1 –
아주 좋아, DataTable에서 열을 계산할 수 있다는 것을 몰랐습니다. +1 –
당신이 표현을 사용할 수 있다는 것을 알았지 만 나는 아직 알지 못했습니다. http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression%28VS.80%29.aspx – maxwellb