Jak zmienić kolejność kolumn z danymi w języku C #.
Przykład:
Utworzono kolejność typu tabeli sql Qty, Unit, Id, ale w programie kolejność DataTable to Id, Qty, Unit. W kodzie Behind am bezpośrednio przekaż DataTable do typu tabeli sql, aby kolejność tabeli była inna.
DataTable columns are: `Id,Qty,Unit.` I want this to be: `Qty,Unit,Id`
Proszę pomóż
Qty,Unit,Id
ale w programie kolejność DataTable jestId,Qty,Unit
. W kodzie Behind am bezpośrednio przekaż DataTable do typu tabeli sql, aby kolejność tabeli była inna. Dlatego pojawia się pytanie „jak zmienić kolejność kolumn?”Odpowiedzi:
Spróbuj użyć metody DataColumn.SetOrdinal . Na przykład:
dataTable.Columns["Qty"].SetOrdinal(0); dataTable.Columns["Unit"].SetOrdinal(1);
AKTUALIZACJA: Ta odpowiedź przyciągnęła dużo więcej uwagi, niż się spodziewałem. Aby uniknąć nieporozumień i ułatwić korzystanie, zdecydowałem się utworzyć metodę rozszerzającą porządkowanie kolumn w DataTable:
Metoda przedłużenia:
public static class DataTableExtensions { public static void SetColumnsOrder(this DataTable table, params String[] columnNames) { int columnIndex = 0; foreach(var columnName in columnNames) { table.Columns[columnName].SetOrdinal(columnIndex); columnIndex++; } } }
Stosowanie:
table.SetColumnsOrder("Qty", "Unit", "Id");
lub
table.SetColumnsOrder(new string[]{"Qty", "Unit", "Id"});
źródło
Qty,Id,Unit
only.To chcęQty,Unit,Id
.Jest to oparte na odpowiedzi „default locale”, ale usunie nieprawidłowe nazwy kolumn przed ustawieniem liczby porządkowej. Dzieje się tak, ponieważ jeśli przypadkowo wyślesz nieprawidłową nazwę kolumny, to zakończy się niepowodzeniem, a jeśli umieścisz kontrolę, aby zapobiec niepowodzeniu, indeks byłby nieprawidłowy, ponieważ pomijałby indeksy wszędzie tam, gdzie została przekazana nieprawidłowa nazwa kolumny.
public static class DataTableExtensions { /// <summary> /// SetOrdinal of DataTable columns based on the index of the columnNames array. Removes invalid column names first. /// </summary> /// <param name="table"></param> /// <param name="columnNames"></param> /// <remarks> http://stackoverflow.com/questions/3757997/how-to-change-datatable-colums-order</remarks> public static void SetColumnsOrder(this DataTable dtbl, params String[] columnNames) { List<string> listColNames = columnNames.ToList(); //Remove invalid column names. foreach (string colName in columnNames) { if (!dtbl.Columns.Contains(colName)) { listColNames.Remove(colName); } } foreach (string colName in listColNames) { dtbl.Columns[colName].SetOrdinal(listColNames.IndexOf(colName)); } }
źródło
Wiem, że to jest naprawdę stare pytanie… i wygląda na to, że otrzymałem odpowiedź… Ale otrzymałem to samo pytanie, ale z innym powodem, więc zadziałała dla mnie nieco inna odpowiedź. Mam ładny ogólny datagridview wielokrotnego użytku, który pobiera dostarczone do niego źródło danych i po prostu wyświetla kolumny w ich domyślnej kolejności. Aliasy, kolejność i wybór kolumn umieszczam w projektancie na poziomie tableadapter zbioru danych. Jednak zmiana kolejności kolumn zapytania wybierającego nie wydaje się wpływać na kolumny zwracane przez zestaw danych. Znalazłem jedyny sposób na zrobienie tego w projektancie, to usunięcie wszystkich kolumn wybranych w tableadapter i dodanie ich z powrotem w kolejności, w jakiej chcesz je zaznaczyć.
źródło
Jeśli masz więcej niż 2-3 kolumny, nie
SetOrdinal
jest to dobry sposób. Metoda DataView akceptuje tablicę parametrów nazw kolumn. Zamów kolumny tam:ToTable
DataView dataView = dataTable.DefaultView; dataTable = dataView.ToTable(true, "Qty", "Unit", "Id");
źródło
Możemy użyć tej metody do zmiany indeksu kolumn, ale należy ją zastosować do wszystkich kolumn, jeśli jest więcej niż dwie liczby kolumn, w przeciwnym razie pokaże wszystkie niewłaściwe wartości z tabeli danych ............ ........
źródło
Zmiana kolejności danych Tabela na podstawie pewnych warunków lub zaznaczone pole wyboru. PFB: -
var tableResult= $('#exampleTable').DataTable(); var $tr = $(this).closest('tr'); if ($("#chkBoxId").prop("checked")) { // re-draw table shorting based on condition tableResult.row($tr).invalidate().order([colindx, 'asc']).draw(); } else { tableResult.row($tr).invalidate().order([colindx, "asc"]).draw(); }
źródło