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.

Yazılım Soruları

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
249p 27ü

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
101,166p 10ü
Teşekkürler. →  hakandogan 14.09.17 19:07