Forum

C# DataGridView Com...
 
Bildirimler
Hepsini Temizle

C# DataGridView Compare String Sıralama Int Çevirme.

3 Yazılar
2 Üyeler
0 Likes
3,335 Görüntüleme
(@KadriBiCER)
Gönderiler: 2
New Member
Konu başlatıcı
 

Merhaba arkadaşlar doğru yeremi açtım bilemiyorum. Yeni olduğum için yönlendirebilir yada nereye açmam gerektiği hakkında bilgi verebilirsniz.

Konuya geliyorum.

 

Datagridviewde 2'li Columns sıralama yapıyorum ama Compare Metodu String olduğu için sıralama yaparken ASCI e göre sıralıyor. Ben bunu int çevirmem mi gerekiyor. Yada Cell içerisindeki veriyi int olarak mı aldırmam gerekiyor yada her ne yapmam gerekiyor ise yardımcı olabilecek varsa çok memnun kalırım. Şimdiden teşekkür ederim.

DB Kullanmıyorum.

Sıralama yaparken doğru sıralamıyor.??

 

Kodlarımı alta ekliyorum.

----------------------------------------------------------------

SIRALAMAYI BU KODLA ÇEKİYORUMK

puanTablosu.Sort(new RowComparer(SortOrder.Descending));

 

-------------------------------------------------------------------

private class RowComparer : System.Collections.IComparer
{
private static int sortOrderModifier = 1;

public RowComparer(SortOrder sortOrder)
{
if (sortOrder == SortOrder.Descending)
{
sortOrderModifier = -1;
}
else if (sortOrder == SortOrder.Ascending)
{
sortOrderModifier = 1;
}
}

public int Compare(object x, object y)
{
Console.WriteLine("COMPARE ARSILASTIR");
DataGridViewRow DataGridViewRow1 = (DataGridViewRow)x;
DataGridViewRow DataGridViewRow2 = (DataGridViewRow)y;

// Try to sort based on the Last Name column.
int CompareResult = System.String.Compare(
DataGridViewRow1.Cells[4].Value.ToString(),
DataGridViewRow2.Cells[4].Value.ToString());

// If the Last Names are equal, sort based on the First Name.
if (CompareResult == 0)
{
CompareResult = System.String.Compare(
DataGridViewRow1.Cells[5].Value.ToString(),
DataGridViewRow2.Cells[5].Value.ToString());
}

return CompareResult * sortOrderModifier;

}

 
Gönderildi : 17/01/2019 20:04

(@serdaldincer)
Gönderiler: 5
Active Member
 

Merhabalar,

 

Eklediğiniz kod DataGridView.Sort için kullanılan örnek kod olduğundan tam olarak nasıl bir sıkıntı yaşadığınızı anlamadım ama String.Compare ile string 2 içerik arasında sort order olarak sırayı alırsınız. Bununla birlikte eğer içeriğiniz sayısal değer içeriyorsa yine string gibi sıralama sonucu döndürecektir. Sanırım sıkıntıyı burada yaşıyorsunuz. Bu durumda String.Compare yerine Cell değerini hangi veri tipini (int, decimal, ..vs) içeriyorsa ona convert edin ve CompareTo ile karşılatırın.

 
Gönderildi : 18/01/2019 13:15

(@KadriBiCER)
Gönderiler: 2
New Member
Konu başlatıcı
 

Cevabınız için teşekkür ederim.

Alttaki gibi çözdüm.

 

puanTablosu.Sort(new RowComparer(SortOrder.Descending));

}

private class RowComparer : System.Collections.IComparer
{
private static int sortOrderModifier = 1;

public RowComparer(SortOrder sortOrder)
{
if (sortOrder == SortOrder.Descending)
{
sortOrderModifier = -1;
}
else if (sortOrder == SortOrder.Ascending)
{
sortOrderModifier = 1;
}
}

public int Compare(object x, object y)
{
Console.WriteLine("COMPARE ARSILASTIR");
DataGridViewRow DataGridViewRow1 = (DataGridViewRow)x;
DataGridViewRow DataGridViewRow2 = (DataGridViewRow)y;

int a = Convert.ToInt32( DataGridViewRow1.Cells[4].Value);
int b = Convert.ToInt32(DataGridViewRow2.Cells[4].Value);
int c = a.CompareTo(b);

int CompareResult = System.String.Compare(
DataGridViewRow1.Cells[4].Value.ToString(),
DataGridViewRow2.Cells[4].Value.ToString());

if (c == 0)
{
// c = System.String.Compare(DataGridViewRow1.Cells[5].Value.ToString(),DataGridViewRow2.Cells[5].Value.ToString());
int d = Convert.ToInt32(DataGridViewRow1.Cells[5].Value);
int e = Convert.ToInt32(DataGridViewRow2.Cells[5].Value);
c = d.CompareTo(e);

}

if (c == 0)
{
int f = Convert.ToInt32(DataGridViewRow1.Cells[3].Value);
int g = Convert.ToInt32(DataGridViewRow2.Cells[3].Value);
c = f.CompareTo(g);
}

 
Gönderildi : 18/01/2019 20:38

Paylaş: