C# Listbox'daki Tekrarlayan - Aynı Verileri Temizleme

Katılım
27 Ocak 2012
Mesajlar
14.466
Makaleler
34
Çözümler
41
Yer
İstanbul/Üsküdar
Daha fazla  
Cinsiyet
Erkek
Meslek
Active Directory - Security Uzmanı
Profil Kapağı
1522600635
Listbox'da birden çok sayıda aynı item bulunuyorsa 1 tane kalana kadar geri kalan diğer fazlalıkları silmeye yarar.

Örnek vermek gerekirse veritabanından gelen 1. resimdeki sanatçıları 2. resimdeki gibi düzenliyor. Aynı verileri "Tek bir tane kalana kadar" siliyor. Tek olan itemlere ellemiyor, aynı kalıyor.
b.jpg
a.jpg


C#:
string[] arr = new string[sanatcilist.Items.Count];
   sanatcilist.Items.CopyTo(arr, 0);

    var arr2 = arr.Distinct();

   sanatcilist.Items.Clear();
    foreach (string s in arr2)
    {
       sanatcilist.Items.Add(s);
    }
 
Hocam merhaba sırf size cevap vermek için şimdi üye oldum :) Form'a bir adet button bir adet de listbox ekledim. Bunların içerisinde aynı isme sahip birkaç kişi var.

Kodun tamamını yazayım. Oradan işinize yaran kısmı alırsınız. Neden böyle oldu diye soracak olursanız açıklamayı da yaparım. Dikkat etmeniz gereken şey; bu işlemde sonsuz dizi kullandık. Bunu kullanmak için de using System.Collections; diye bir kodu kodlarımızın en üstünde bulunan usingli kısıma yazdık :))

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections; //sonsuz dizi yaratmak için kullanılan kod

namespace WindowsFormsApplication2 //sizin projenizin adı yazacak burada
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
ArrayList eleman = new ArrayList(); //sonsuz dizimizi yaratıyoruz
private void button1_Click(object sender, EventArgs e) //buton1'e basıldığında
{
foreach (string item in listBox1.Items) //listBox1 deki itemları tek tek dolaş ve bunların adına item de.
{
if (eleman.Contains(item) == false) //eğer eleman (yani sonsuz dizimiz) elemanları içermiyorsa
{
eleman.Add(item); //sonsuz diziye itemları ekle

}
}
listBox1.Items.Clear(); //listBox'ı temizle
listBox1.Items.AddRange(eleman.ToArray()); //listBox'a eleman dizinin elemanlarını ekle
}
}
}
 
Hocam merhaba sırf size cevap vermek için şimdi üye oldum :) Form'a bir adet button bir adet de listbox ekledim. Bunların içerisinde aynı isme sahip birkaç kişi var.

Kodun tamamını yazayım. Oradan işinize yaran kısmı alırsınız. Neden böyle oldu diye soracak olursanız açıklamayı da yaparım. Dikkat etmeniz gereken şey; bu işlemde sonsuz dizi kullandık. Bunu kullanmak için de using System.Collections; diye bir kodu kodlarımızın en üstünde bulunan usingli kısıma yazdık :))

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections; //sonsuz dizi yaratmak için kullanılan kod

namespace WindowsFormsApplication2 //sizin projenizin adı yazacak burada
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
ArrayList eleman = new ArrayList(); //sonsuz dizimizi yaratıyoruz
private void button1_Click(object sender, EventArgs e) //buton1'e basıldığında
{
foreach (string item in listBox1.Items) //listBox1 deki itemları tek tek dolaş ve bunların adına item de.
{
if (eleman.Contains(item) == false) //eğer eleman (yani sonsuz dizimiz) elemanları içermiyorsa
{
eleman.Add(item); //sonsuz diziye itemları ekle

}
}
listBox1.Items.Clear(); //listBox'ı temizle
listBox1.Items.AddRange(eleman.ToArray()); //listBox'a eleman dizinin elemanlarını ekle
}
}
}
Hazır üye olmuşken devamı da gelsin :) Bir problemin olursa paylaş mutlaka, yardımcı olmaya çalışırız.
Paylaştığımız kodlar hemen hemen aynı, dizi mantığı ile hareket ediyor.
For döngüsü ile böyle bir işlev mümkün olmuyor çünkü silme komutu verildiğinde döngünün item sayısı düştüğü için döngü fazladan dönüyor ve hata meydana geliyor.
Silinecek index numaralarını başka bir alana çekersen ancak öyle silebiliyorsun, onu da büyük index numarasından başlayarak sileceksin ki küçük olan indexlerin; İndex numaraları değişmesin, azalmasın :)

Dizileri pek kullanmazdım ancak bu amaç uğruna çok gerekli bir fonksiyon :)
 
Uyarı! Bu konu 8 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Geri
Yukarı