المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : كيف يمكن ترتيب عناصر الجريد تصاعديا مثل الإيكسل


ابراهيم عوض
12-12-2015, 05:39 PM
السلام عليكم ورحمة الله وبركاته
لدى جريد به عدة حقول
لو سمحتم اريد ارتب هذا الجريد تصاعديا على حسب احد الأعمدة التى بها بيانات كلها ارقام
بحيث عند ترتيب العمود تترتب باقى الجريد على حسب العمود
استخدمت
Grid.SortTextItems("Grid1", 0, true, true);
و هى ترتب كافة الجريد وفقا لعمود الترتيب
لكنها لا ترتب الأرقام بشكل صحيح
جربت كل بارومترات الدالة و لم تفلح

كيف اعدل الدالة لترتب بشكل صحيح
لو هناك دالة اخرى ففضلا دلونى عليها

من فضلكم لو تكرمتم فمشروعى متوقف على هذه النقطة

ياسرهتهت
12-12-2015, 07:09 PM
بسم الله الرحمن الرحيم
اخي العزيز
شاهد هذا الموضوع
http://www.abc4web.net/vb/showthread.php?t=32605

ان شاء الله يفيدك

ابراهيم عوض
12-12-2015, 07:36 PM
بسم الله الرحمن الرحيم
اخي العزيز
شاهد هذا الموضوع
http://www.abc4web.net/vb/showthread.php?t=32605

ان شاء الله يفيدك

شكرا استاذ ياسر على الرابط

بعد المشاهدة
الرابط يشرح الترتيب التنازلى

و انا ارغب فى الترتيب تصاعدى
فما هى الطريقة لذلك ؟

المـهاجر
13-12-2015, 07:11 PM
البليجن له إصداران جاهزان
الأول فقط منشور
لو لم تكن توصلت لحل أطلعنى لتنزيل الإصدار الثانى
MohagerGridsort.GridSort("Grid1", 0, true);

http://www12.0zz0.com/2015/12/13/20/635997378.jpg

true تعادل تصاعدى
false تعادل تنازلى

منتظر ردك
:abc_152:

ثامر أبو بلقيس
13-12-2015, 08:05 PM
إن شاء الله أجد وقت اليوم و أكتب لك الحل :abc_138:

ثامر أبو بلقيس
13-12-2015, 08:23 PM
السلام عليكم ورحمة الله وبركاته

01 - أكتب في global functions
function GridSortRange(strGridName,StartRow,StartColumn,End Row,EndColumn,Desc)
local tTmp = {}
local nSRow = StartRow
local nSCol = StartColumn
local nERow = EndRow
local nECol = EndColumn
local nComp = -1
if (Desc) then nComp = 1 end
local swap = function(a,b) return (String.CompareNoCase(a,b) == nComp) end
Grid.SetRedraw(strGridName, false, false);
for c = nSCol , nECol do
for r = nSRow, nERow do
tTmp[r] = Grid.GetCellText(strGridName, r, c)
end
table.sort(tTmp,swap)
for index,value in ipairs(tTmp) do
Grid.SetCellText(strGridName, index, c, value, false);
end
tTmp = {}
end
Grid.SetRedraw(strGridName, true, true);
end
function GridSortRowsByColumn(strGridName,StartColumn,EndCo lumn,StartRow,EndRow,SortByColumn,Desc)
local tTmp = {}
local nSRow = StartRow
local nSCol = StartColumn
local nERow = EndRow
local nECol = EndColumn
local nComp = -1
if(SortByColumn < StartColumn and SortByColumn > EndColumn) then return end -- sorted column must be in the range of StartColumn - EndColumn
if (Desc) then nComp = 1 end
local swap = function(a,b) return (String.CompareNoCase(a[SortByColumn],b[SortByColumn]) == nComp) end
Grid.SetRedraw(strGridName, false, false);
for r = nSRow, nERow do
local tblx = {}
for c = nSCol , nECol do
tblx[c] = Grid.GetCellText(strGridName, r, c)
end
tTmp[r] = tblx
end
table.sort(tTmp,swap)
for row_index,row_value in pairs(tTmp) do
for col_index,col_value in pairs(row_value) do
Grid.SetCellText(strGridName, row_index, col_index, col_value, false);
end
end
tTmp = {}
Grid.SetRedraw(strGridName, true, true);
end



كيف نستغل هذه الأكواد ... نعود لمشاركة قديمة في الموقع تعود لسنة2014

و نضع في زر الكود التالي :
x=1------------------------------------------------------------------------------------------
p=Grid.GetRowCount("Grid1");-----------------------------------------------------------------
for i=x,p do c= Grid.GetCellText("Grid1", i, 4);c = String.ToNumber(c);----------------------
if c < 10 then Grid.SetCellText("Grid1", i, 4, "a"..c, true);--------------------------------
elseif c >=10 and c<= 99 then Grid.SetCellText("Grid1", i, 4, "b"..c, true);----------------
elseif c >=100 and c<= 999 then Grid.SetCellText("Grid1", i, 4, "d"..c, true);--------------
elseif c >=1000 and c<= 9999 then Grid.SetCellText("Grid1", i, 4, "e"..c, true);------------
elseif c >=10000 and c<= 99999 then Grid.SetCellText("Grid1", i, 4, "f"..c, true);----------
elseif c >=100000 and c<= 999999 then Grid.SetCellText("Grid1", i,4, "g"..c, true);--------
elseif c >=1000000 and c<= 9999999 then Grid.SetCellText("Grid1", i, 4, "h"..c, true);------
end end
local s_row = 1
local s_col = 0
local e_row = Grid.GetRowCount("Grid1")-1
local e_col = Grid.GetColumnCount("Grid1")-1
local sort_col = 4
GridSortRowsByColumn("Grid1",s_col,e_col,s_row,e_row,sort_col,false)
---------
for u=x,p do ------
y= Grid.GetCellText("Grid1", u, 4); --abou_belkiss alger le 26-03-2014 ------
n = String.Mid(y, 1, 1); ------
c = String.Replace(y, n, "", false); ------
Grid.SetCellText("Grid1", u, 4, c, true); ------
end------------------------------------------------------------------------------------------ ------


لاحظ في الكود الثاني الرقم الأربعة المكرر في عدة أسطر هو رقم العمود الذي نريد
من خلاله الترتيب الأربعة 4 طبعا في الجريد يبدا عد الأسطر انطلاقا من 0
أي الاربعة المكتوبة معبرة عن العمود الخامس عمليا :abc_138:

الصف الأول غير معني بالترتيب متروك للعناوين

ابراهيم عوض
13-12-2015, 09:15 PM
لاحظ في الكود الثاني الرقم الأربعة المكرر في عدة أسطر هو رقم العمود الذي نريد
من خلاله الترتيب الأربعة 4 طبعا في الجريد يبدا عد الأسطر انطلاقا من 0
أي الاربعة المكتوبة معبرة عن العمود الخامس عمليا :abc_138:

الصف الأول غير معني بالترتيب متروك للعناوين

شاكر لك روح التعاون استاذ ثامر :abc_138:

لم افهم الإقتباس

فعلت كما ذكرت لى
ارفقت ملف مفتوح به الكود

كيف يمكن تعديله ليرتب خانة المجموع ؟
و لماذا كلما ضغطت على زر الترتيب يتغير الترتيب عن سابق ؟

ثامر أبو بلقيس
13-12-2015, 09:21 PM
خانة المجموع عندك هي العمود الاول لكن بالنسبة للجريد الأول هو 0 كما اخبرتك يبدأ العد بالنسبة له من 0

اذن العمود الذي سترتب بناء عليه هو العمود 0

ليصبح الكود يعد تغيير كل 4 بـ 0

x=1------------------------------------------------------------------------------------------
p=Grid.GetRowCount("Grid1");-----------------------------------------------------------------
for i=x,p do c= Grid.GetCellText("Grid1", i, 0);c = String.ToNumber(c);----------------------
if c < 10 then Grid.SetCellText("Grid1", i, 0, "a"..c, true);--------------------------------
elseif c >=10 and c<= 99 then Grid.SetCellText("Grid1", i, 0, "b"..c, true);----------------
elseif c >=100 and c<= 999 then Grid.SetCellText("Grid1", i, 0, "d"..c, true);--------------
elseif c >=1000 and c<= 9999 then Grid.SetCellText("Grid1", i, 0, "e"..c, true);------------
elseif c >=10000 and c<= 99999 then Grid.SetCellText("Grid1", i, 0, "f"..c, true);----------
elseif c >=100000 and c<= 999999 then Grid.SetCellText("Grid1", i,0, "g"..c, true);--------
elseif c >=1000000 and c<= 9999999 then Grid.SetCellText("Grid1", i, 0, "h"..c, true);------
end end
local s_row = 1
local s_col = 0
local e_row = Grid.GetRowCount("Grid1")-1
local e_col = Grid.GetColumnCount("Grid1")-1
local sort_col = 0
GridSortRowsByColumn("Grid1",s_col,e_col,s_row,e_row,sort_col,false)
---------
for u=x,p do ------
y= Grid.GetCellText("Grid1", u, 0); --abou_belkiss alger le 26-03-2014 ------
n = String.Mid(y, 1, 1); ------
c = String.Replace(y, n, "", false); ------
Grid.SetCellText("Grid1", u, 0, c, true); ------
end------------------------------------


شوف الان هل مازال عندك اشكال :abc_138:

ثامر أبو بلقيس
20-12-2015, 12:28 PM
لم تنفي و لم تثبت صحة الاكواد
الظاهر أن الطلب غير مستعجل عذرا تدخلي كان حينها بناء على عجلة توهمتها :abc_138:

زياد مقداد
20-12-2015, 09:16 PM
شكرا لكم موضوع قيم فعلا

فرح صالحي
26-12-2015, 09:31 PM
شـكــ وبارك الله فيك ـــرا لك .:abc_152:.. لك مني أجمل تحية .