PDA

View Full Version : مرتب کردن لیست عددی



Hossis
جمعه 08 آبان 1388, 09:59 صبح
مرتب کردن لیست عددی یک مشکل داره که اعداد به صورت رشته مرتب می شوند مثلا اعداد یک تا 12 به این صورت مرتب می شوند.
1
10
11
12
2
3
...
در حالی که هنگام مرتب سازی (Sort) می خواهیم به ترتیب شماره یعنی 1،2،3،... مرتب شود،
ایا راه حلی برای این مشکل وجود دارد؟

Mani_rf
جمعه 08 آبان 1388, 19:31 عصر
در صورتی که لیست عددی شما یک آرایه است تنها کافیست تا نوع مناسب عددی را برای آرایه انتخاب نمایید.
اما در صورتی که منظور شما از مرتب سازی ، مرتب سازی خود کار کنترل هایی مانند DataGridView است ، لازم است این نکته را یاد آور شوم که این کنترل های به صورت پیش فرض اطلاعات درج شده در سطر ها و ستون ها را از نوع رشته در نظر گرفته و مرتب می کنند . برای مرتب سازی ستون هایی مانند کد، شماره پرسنلی و ... که قالب عددی دارند لازم است تا نوع ستون را به نوع عددی تبدیل نمایید.
ساختن ستونی از نوع عددی در DataGridView می توانید از چنین کدی استفاده نمایید :



Dim Col AsNew DataGridViewColumn
Col.Name = "ID"
Col.HeaderText = "کد کاربر"
Col.ValueType = System.Type.GetType("System.Int64")
DgvData.Columns.Add(Col)




و یا در هنگام فراخوانی اطلاعات از دیتابیس نوع آن را مشخص نمایید.

ali_md110
شنبه 09 آبان 1388, 00:51 صبح
اگر اعداد یکان بصورت 01 یا 02 باشند مشکلتون حل میشه

Hossis
شنبه 09 آبان 1388, 18:40 عصر
ساختن ستونی از نوع عددی در DataGridView می توانید از چنین کدی استفاده نمایید :


ممنون
ولی من میخواهم در کنترلهای معمولی مثل جعبه لیست (ListBox) یا لیست نمایش(ListView) این مرتب سازی رو انجام بدم. اعضای اون رو چطور عددی کنم؟

Hossis
شنبه 09 آبان 1388, 18:47 عصر
اگر اعداد یکان بصورت 01 یا 02 باشند مشکلتون حل میشه
ولی اگر به 100 برسه باز هم مشکل سر جاش هست

pirmard
یک شنبه 10 آبان 1388, 00:04 صبح
ممنون
ولی من میخواهم در کنترلهای معمولی مثل جعبه لیست (ListBox) یا لیست نمایش(ListView) این مرتب سازی رو انجام بدم.

این هم راه حل منتها قصدم ازاین راه حل بیشتر اینه که با آورلود کردن آشنا بشین (مربوط به اون تاپیک دیگتون میشه بیشتر)

فرض می گیریم که طبق گفته ی شما احتیاج به مرتب سازی لیست باکس و لیست ویو دارین :



Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Sort_Control_List(ListBox1, SortType.Ascendant)
Sort_Control_List(ListView1, SortType.descendant)
End Sub


Private Enum SortType
Ascendant
descendant
End Enum
Private Overloads Sub Sort_Control_List(ByRef Listbox_control As ListBox, ByVal Sort_Type As SortType)
Dim temp As String
If Sort_Type = SortType.Ascendant Then
For i = 0 To Listbox_control.Items.Count - 1
For j = i To Listbox_control.Items.Count - 1
If Val(Listbox_control.Items(i).ToString) >= Val(Listbox_control.Items(j).ToString) Then
temp = Listbox_control.Items(i).ToString
Listbox_control.Items(i) = Listbox_control.Items(j)
Listbox_control.Items(j) = temp
End If
Next
Next
Else
For i = 0 To Listbox_control.Items.Count - 1
For j = i To Listbox_control.Items.Count - 1
If Val(Listbox_control.Items(i).ToString) <= Val(Listbox_control.Items(j).ToString) Then
temp = Listbox_control.Items(i).ToString
Listbox_control.Items(i) = Listbox_control.Items(j)
Listbox_control.Items(j) = temp
End If
Next

Next
End If
End Sub


Private Overloads Sub Sort_Control_List(ByRef listview_control As ListView, ByVal Sort_Type As SortType)
Dim temp As String
If Sort_Type = SortType.Ascendant Then
For i = 0 To listview_control.Items.Count - 1
For j = i To listview_control.Items.Count - 1
If Val(listview_control.Items(i).Text) >= Val(listview_control.Items(j).Text) Then
temp = listview_control.Items(i).Text
listview_control.Items(i).Text = listview_control.Items(j).Text
listview_control.Items(j).Text = temp
End If
Next
Next
Else
For i = 0 To listview_control.Items.Count - 1
For j = i To listview_control.Items.Count - 1
If Val(listview_control.Items(i).Text) <= Val(listview_control.Items(j).Text) Then
temp = listview_control.Items(i).Text
listview_control.Items(i).Text = listview_control.Items(j).Text
listview_control.Items(j).Text = temp
End If
Next

Next
End If
End Sub