Yazılım.
CevapSitesi.com Beta!
Çözüm Noktası
Facebook, Twitter, Google+ veya e-posta ile paylaşın.
| Sorular | Makaleler | Üyeler | Etiketler  | İletişim
Soru sormak ya da cevap vermek için;
giriş yapın veya üye olun.

Sosyal medya hesaplarınızla da giriş yapabilirsiniz.
0

Listview bir sütunundaki sayılara göre sıralama sorunu

Merhaba,
Formda bulunan listview sorting özellğini ascending olarak seçiyorum fakat;

Kayıtları listview'e aktardığım zaman listview in "Sıra No" adlı sütununda sıralama şu şekilde oluyor;
1,10,11,12,13,14,15,16,17,18,19,2,20,21,22,23,24,25,26,27,28,29,3,30,31,32................

Ardışık şekilde nasıl sıralanabilir acaba?

1,2,3,4,5,6,7,8,9,10,11,12............. 

Teşekkürler...

Soran: 14.09.17 16:33
hakandogan
310p 32ü

1 Cevap

0
Sütunu String olarak sıralıyor. Bunu düzeltmek için IComporer ile özel sıralama belirtmek gerekir. Alttaki örnek bunu yapar. button1_Click içindekiler sıralamak için kullanılan kodlar. Başka bir yere koyabilirsin.

Ayrıca sütundaki bir değer sayıya çevrilemiyorsa sıralamada diğerlerini etkilemeyecektir ve istenmeyen bir yerde durabilir. Yani sütündaki değerlerin tümünün sayıya çerilebilir olması lazım.
public class ListViewItemComparer : IComparer
{

    private int col;
    private SortOrder order;
    public ListViewItemComparer()
    {
        col = 0;
        order = SortOrder.Ascending;
    }
    public ListViewItemComparer(int column, SortOrder order)
    {
        col = column;
        this.order = order;
    }
    public int Compare(object x, object y)
    {
        int returnVal = -1;
        int intx = 0, inty = 0;
        if (!Int32.TryParse(((ListViewItem)x).SubItems[col].Text, out intx)) intx = 0;
        if (!Int32.TryParse(((ListViewItem)y).SubItems[col].Text, out inty)) inty = 0;
        returnVal = intx.CompareTo(inty);
		// String olarak sıralamak için alttaki kullanılır.
        //returnVal = String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
        if (order == SortOrder.Descending) returnVal *= -1;
        return returnVal;
    }
}

private void button1_Click(object sender, EventArgs e)
{
    listView1.Sort();
    listView1.ListViewItemSorter = new ListViewItemComparer(0, listView1.Sorting);
}


Cevaplayan: 14.09.17 15:59
cevapsitesi
102,035p 16ü
Teşekkürler. →  hakandogan 14.09.17 19:07