לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #2  
ישן 10-08-2010, 21:49
  רמי ד רמי ד אינו מחובר  
 
חבר מתאריך: 07.10.06
הודעות: 1,795
בתגובה להודעה מספר 1 שנכתבה על ידי Dorown שמתחילה ב "Datagrideview sort - לאחר שינוי"

אני לא חושב שתוכל לעשות מיון מובנה.
מה שאני הייתי עושה, זה הייתי שומר ב-TAG של ה-ROW את הערך הקטן ביותר בעל השוואה. (למשל לתרגם הכל לדקות).

הנה דוגמא שמבצעת את זה:
קוד:
private void Form1_Load(object sender, EventArgs e) { this.dataGridView1.Columns.Add("1", "1"); this.dataGridView1.Columns.Add("2", "2"); this.dataGridView1.Columns.Add("3", "3"); this.dataGridView1.Columns.Add("Tag", "Tag"); this.dataGridView1.Rows.Add(new string[]{"a","1","c"}); this.dataGridView1.Rows.Add(new string[]{"b","2","c"}); this.dataGridView1.Rows.Add(new string[]{"c","3","c"}); this.dataGridView1.Rows.Add(new string[]{"d","4","c"}); this.dataGridView1.Rows[0].Tag = "0"; this.dataGridView1.Rows[1].Tag = "7"; this.dataGridView1.Rows[2].Tag = "2"; this.dataGridView1.Rows[3].Tag = "3"; for (int X = 0; X < this.dataGridView1.Columns.Count; X++) { this.dataGridView1.Rows[X].Cells[3].Value = this.dataGridView1.Rows[X].Tag; } this.dataGridView1.Sort(new RowComparer()); } private class RowComparer : System.Collections.IComparer { public int Compare(object x, object y) { DataGridViewRow DataGridViewRow1 = (DataGridViewRow)x; DataGridViewRow DataGridViewRow2 = (DataGridViewRow)y; return int.Parse(DataGridViewRow1.Tag.ToString()) - int.Parse(DataGridViewRow2.Tag.ToString()); } }



הערה: כמובן שאתה לא חייב לשמור את הערך ב-TAG, כפי שהצעתי. אתה יכול לממש את ההשוואה בדרך אחרת. למשל פונקציה שתתרגם ש-hours 1 = 60min וכו....
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #3  
ישן 10-08-2010, 21:51
  רמי ד רמי ד אינו מחובר  
 
חבר מתאריך: 07.10.06
הודעות: 1,795
בתגובה להודעה מספר 2 שנכתבה על ידי רמי ד שמתחילה ב "אני לא חושב שתוכל לעשות מיון..."

מסיבה נורא מוזרה לא רואים את התגובה....
וגם הטאבים לא נשמרים....
הנה דוגמא מלאה:
https://2010-uploaded.fresh.co.il/2...10/23969237.rar
אני לא חושב שתוכל לעשות מיון מובנה.
מה שאני הייתי עושה, זה הייתי שומר ב-TAG של ה-ROW את הערך הקטן ביותר בעל השוואה. (למשל לתרגם הכל לדקות).

הנה דוגמא שמבצעת את זה:
קוד PHP:
 private void Form1_Load(object senderEventArgs e)
 
{
 
this.dataGridView1.Columns.Add("1""1");
 
this.dataGridView1.Columns.Add("2""2");
 
this.dataGridView1.Columns.Add("3""3");
 
this.dataGridView1.Columns.Add("Tag""Tag");
 
this.dataGridView1.Rows.Add(new string[]{"a","1","c"});
 
this.dataGridView1.Rows.Add(new string[]{"b","2","c"});
 
this.dataGridView1.Rows.Add(new string[]{"c","3","c"});
 
this.dataGridView1.Rows.Add(new string[]{"d","4","c"});
 
this.dataGridView1.Rows[0].Tag "0";
 
this.dataGridView1.Rows[1].Tag "7";
 
this.dataGridView1.Rows[2].Tag "2";
 
this.dataGridView1.Rows[3].Tag "3";
 
for (
int X 0this.dataGridView1.Columns.CountX++)
 
{
 
this.dataGridView1.Rows[X].Cells[3].Value this.dataGridView1.Rows[X].Tag;
 
}
 
this.dataGridView1.Sort(new RowComparer());
 
}
 
private class 
RowComparer System.Collections.IComparer
 
{
 
public 
int Compare(object xobject y)
 
{
 
DataGridViewRow DataGridViewRow1 = (DataGridViewRow)x;
 
DataGridViewRow DataGridViewRow2 = (DataGridViewRow)y;
 
return 
int.Parse(DataGridViewRow1.Tag.ToString()) - int.Parse(DataGridViewRow2.Tag.ToString());
 
}
 



הערה: כמובן שאתה לא חייב לשמור את הערך ב-TAG, כפי שהצעתי. אתה יכול לממש את ההשוואה בדרך אחרת. למשל פונקציה שתתרגם ש-hours 1 = 60min וכו....

נערך לאחרונה ע"י רמי ד בתאריך 10-08-2010 בשעה 21:54.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #8  
ישן 18-08-2010, 14:20
  רמי ד רמי ד אינו מחובר  
 
חבר מתאריך: 07.10.06
הודעות: 1,795
בתגובה להודעה מספר 7 שנכתבה על ידי Dorown שמתחילה ב "היי רמי, ניסיתי לראות את..."

אני אנסה להסביר מהבסיס.
כדי למיין משהוא (כל דבר) החליטו לבנות ממשק. הממשק מחייב את המחלקה להתנהג בצורה מסויימת (או בפשטות, לממש פעולה מסויימת) שמו הוא זה: System.Collections.IComparer.
כדי שהאלגוריתם של ה-Datagrideview יוכל למיין כל דבר, כל מה שאתה צריך לעשות זה רק לממש את ההשוואה בין 2 אובייקטים (או במקרה שלך בין שני אובייקטים מסוג DataGridViewRow).
לדוגמא, ניקח שני מספרים A ו-B. אם נחסר זה מזה, והתוצאה שלילית, אז כמובן ש-B גדול מ-A. (וכמובן גם להיפך).
הפונקציה שלך צריכה להחזיר את תוצאת ההשוואה. (או בדוגמא זו את תוצאת החיסור)

לכן כל מה שאתה צריך לעשות זה לממש את פונקצית ההשוואה. במקרה שלך, תצטרך למשל להחליף את המילה hours במספר 60 ולחבר בינו לבין המספר שלידו. וכך תוכל להשוות בינהם...



נערך לאחרונה ע"י רמי ד בתאריך 18-08-2010 בשעה 14:23.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 23:54

הדף נוצר ב 0.13 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר