DataTable sütun sırası nasıl değiştirilir


92

C # 'da Datatable sütun sırası nasıl değiştirilir.

Misal:

Oluşturulan sql tablo türü sırası Qty, Unit, Id'dir, ancak programda DataTable sırası Id, Qty, Unit'dir. Behind kodunda DataTable'ı doğrudan sql tablo türüne geçiriyorum, böylece tablo sırası farklı.

DataTable columns are: `Id,Qty,Unit.`  I want this to be: `Qty,Unit,Id` 

Lütfen yardım et


1
sütun sırasını neden değiştirmek istediğinizi açıklayabilir misiniz?
KBoek

Oluşturulan sql tablo türü sırası Qty,Unit,Id ancak programda DataTable sırasıdır Id,Qty,Unit. Arkasında kodda DataTable'ı doğrudan sql tablo türüne geçiriyorum, bu nedenle tablo sırası farklı.
Vyasdev Meledath

6
Sadece OP'ye cevap verin.
Christian

Yanıtlar:


233

DataColumn.SetOrdinal yöntemini kullanmayı deneyin . Örneğin:

dataTable.Columns["Qty"].SetOrdinal(0);
dataTable.Columns["Unit"].SetOrdinal(1); 

GÜNCELLEME: Bu yanıt beklediğimden çok daha fazla ilgi gördü. Karışıklığı önlemek ve kullanımı kolaylaştırmak için DataTable'da sütun sıralaması için bir uzantı yöntemi oluşturmaya karar verdim:

Uzatma yöntemi:

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++;
        }
    }
}

Kullanım:

table.SetColumnsOrder("Qty", "Unit", "Id");

veya

table.SetColumnsOrder(new string[]{"Qty", "Unit", "Id"});

dediğin gibi vererek masa yapısını sadece olarak değiştirdim. ben Qty,Id,Unit böyle istiyorum Qty,Unit,Id.
Vyasdev Meledath

Ofc, bu yöntemi sonuncusu hariç tüm sütunlar için kullanmalısınız.
varsayılan yerel ayar

4
daha iyi yöntem gövdesi: var colIndex = 0; foreach (sütunNamesindeki var sütunAdı) table.Columns [sütunAdı] .SetOrdinal (colIndex ++);
JoelFan

@JoelFan Cevabımı güncelledim, teşekkür ederim! Kodunuz kesinlikle daha temiz görünüyor.
varsayılan yerel ayar

1
çok yardımcı oldu, tnx.
jonathana

6

Bu, "varsayılan yerel ayar" yanıtına dayanmaktadır, ancak sıra ayarlamadan önce geçersiz sütun adlarını kaldıracaktır. Bunun nedeni, yanlışlıkla geçersiz bir sütun adı gönderirseniz, başarısız olacağı ve başarısız olmasını önlemek için bir kontrol yaparsanız, geçersiz bir sütun adının geçirildiği her yerde indeksleri atlayacağı için indeksin yanlış olacağıdır.

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));
        }
}

2

Bunun gerçekten eski bir soru olduğunu biliyorum .. ve cevaplanmış gibi görünüyor .. Ama buraya aynı soruyla geldim, ancak soru için farklı bir sebeple geldim ve bu yüzden biraz farklı bir cevap benim için çalıştı. Sağlanan veri kaynağını alan ve sütunları varsayılan sıralarında görüntüleyen güzel, yeniden kullanılabilir bir genel veri görünümüm var. Designer'daki dataset'in tableadapter seviyesinde takma adları ve sütun sırası ve seçimi koydum. Ancak, sütunların seçme sorgusu sırasını değiştirmek, veri kümesinden döndürülen sütunları etkilemiyor gibi görünüyor. Bunu tasarımcıda yapmanın tek yolunu buldum, tablo bağdaştırıcısı içinde seçilen tüm sütunları kaldırıp, onları seçilmesini istediğiniz sıraya göre geri eklemek.


1

2-3'ten fazla sütununuz varsa, yapılacak yol SetOrdinalbu değildir . DataView ToTableyöntemi, sütun adlarından oluşan bir parametre dizisini kabul eder. Orada sütunlarınızı sıralayın:

DataView dataView = dataTable.DefaultView;
dataTable = dataView.ToTable(true, "Qty", "Unit", "Id");

0

Bu yöntemi sütun indeksini değiştirmek için kullanabiliriz, ancak ikiden fazla sütun varsa tüm sütunlara uygulanmalıdır, aksi takdirde veri tablosundaki tüm Yanlış değerleri gösterecektir ............ ........


-3

Bazı koşullara veya onay kutusuna göre veri Tablosu yeniden sipariş edildi. 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();
                    }

Lütfen soruyu dikkatlice okuyunuz. Yukarıdaki sorgu c # için jquery için değil
Ahmad Mukhtar

1
Bu cevap sadece yanlış dil için değil, soru satırları sıralamak değil sütunları sıralamak içindi. Kabul edilen cevabın üzerinden 8 yıl geçtikten sonra, bu yanıta nasıl ulaştınız? Neden?
jreed121
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.