Bagaimana mengubah urutan kolom Datatable di c #.
Contoh:
Saya membuat urutan tipe tabel sql adalah Qty, Unit, Id tetapi dalam urutan program DataTable adalah Id, Qty, Unit. Dalam kode Di Belakang saya langsung meneruskan DataTable ke tipe tabel sql sehingga urutan tabelnya berbeda.
DataTable columns are: `Id,Qty,Unit.` I want this to be: `Qty,Unit,Id`
Tolong bantu
Qty,Unit,Id
tetapi dalam urutan program DataTable adalahId,Qty,Unit
. Pada code Behind, saya langsung mengoper DataTable ke tipe tabel sql sehingga urutan tabelnya berbeda. Itulah mengapa saya ditanya "bagaimana cara mengubah urutan kolom?"Jawaban:
Coba gunakan metode DataColumn.SetOrdinal . Sebagai contoh:
dataTable.Columns["Qty"].SetOrdinal(0); dataTable.Columns["Unit"].SetOrdinal(1);
UPDATE: Jawaban ini mendapat perhatian lebih dari yang saya harapkan. Untuk menghindari kebingungan dan membuatnya lebih mudah digunakan, saya memutuskan untuk membuat metode ekstensi untuk pengurutan kolom di DataTable:
Metode ekstensi:
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++; } } }
Pemakaian:
table.SetColumnsOrder("Qty", "Unit", "Id");
atau
table.SetColumnsOrder(new string[]{"Qty", "Unit", "Id"});
sumber
Qty,Id,Unit
Saya ingin seperti iniQty,Unit,Id
.Ini didasarkan pada jawaban "default locale" tetapi akan menghapus nama kolom yang tidak valid sebelum menyetel ordinal. Ini karena jika Anda secara tidak sengaja mengirim nama kolom yang tidak valid maka itu akan gagal dan jika Anda memberi tanda centang untuk mencegahnya gagal maka indeks akan salah karena akan melewatkan indeks di mana pun nama kolom yang tidak valid diteruskan.
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)); } }
sumber
Saya tahu ini adalah pertanyaan yang sangat lama .. dan tampaknya telah dijawab .. Tetapi saya sampai di sini dengan pertanyaan yang sama tetapi alasan yang berbeda untuk pertanyaan itu, dan jawaban yang sedikit berbeda berhasil untuk saya. Saya memiliki datagridview generik yang bagus dan dapat digunakan kembali yang mengambil sumber data yang disediakan untuk itu dan hanya menampilkan kolom dalam urutan defaultnya. Saya menempatkan alias dan urutan kolom dan seleksi pada tingkat tabel adaptor set data di desainer. Namun mengubah urutan kueri pemilihan kolom tampaknya tidak memengaruhi kolom yang dikembalikan melalui kumpulan data. Saya telah menemukan satu-satunya cara untuk melakukan ini pada desainer, adalah dengan menghapus semua kolom yang dipilih di dalam tableadapter, menambahkannya kembali dalam urutan yang Anda inginkan.
sumber
Jika Anda memiliki lebih dari 2-3 kolom,
SetOrdinal
adalah tidak cara untuk pergi. Metode DataViewToTable
menerima larik parameter nama kolom. Pesan kolom Anda di sana:DataView dataView = dataTable.DefaultView; dataTable = dataView.ToTable(true, "Qty", "Unit", "Id");
sumber
Kita dapat menggunakan metode ini untuk mengubah indeks kolom tetapi harus diterapkan ke semua kolom jika ada lebih dari dua jumlah kolom jika tidak maka akan menampilkan semua nilai yang tidak benar dari tabel data ............ ........
sumber
Re-Ordering data Tabel berdasarkan beberapa kondisi atau kotak centang dicentang. 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(); }
sumber