תאריך פרסום: 18:55:01 04/05/2011
מילוי של רשימות נפתחות יכול להיעשות ע"י DataBinding בשיטות אשר כמעט אינן כוללות כתיבת קוד, בעזרת כלים שיש ב- Visual Studio
אולם כאן נראה דרך למילוי Drop Down List בנתונים שנמשכים מבסיס הנתונים, ע"י קוד שנכתב ידנית:
c#:
void DropDownFill()
{
if (!IsPostBack)
{
SqlDataReader ddDR = null;
SqlConnection conn = new SqlConnection("Data Source=SNIR-LT\SQLEXPRESS;Catalog=project;Security=True");
SqlCommand ddSqlCommand = new SqlCommand("SELECT * FROM tableName", conn);
try
{
conn.Open();
ddDR = ddSqlCommand.ExecuteReader(CommandBehavior.CloseConnection);
DropDownList1.DataSource = ddDR;
DropDownList1.DataTextField = "columnName";
DropDownList1.DataValueField = "columnName";
DropDownList1.DataBind();
}
// CONNECT TO DATABASE
// FILL:DROPDOWNLIST
catch{}
finally { conn.Close(); }
}
}
עלינו לזכור שבשביל עבודה עם הנתונים שנשמרו בתוך הרשימות הנ'ל יש צורך להציב את כל הפקודות האלה בתוך IsPostBack -
במילים קצרות המאפיין הזה אומר אם הדף נטען עכשיו בפעם הראשונה - או לא, וזה מה שאנחנו צריכים, לכן הצבנו (if (!IsPostBack
אחרת הרשימות היו חוזרות למצב התחלתי, בגלל שכל אירוע (Event) שמתרחש בדף עושה קודם כל Load חדש לדף.
באופן כללי אפשר להציב את IsPostBack בתוך פונקציה שקוראת לפונקציה הזאת.
תוצאה לדוגמה:
כמו שאפשר לראות אחת הבעיות שיכולות להתעורר בפעולה כזאת של מילוי הרשימות היא ערכים כפולים.
ניתן להיפטר מערכים כפולים בעזרת האלגוריתם הבא:
c#:
public static void RemoveDuplicateItems(DropDownList ddl)
{
string str, compareStr;
//DEFINE MEMBERS
for (int i = 0; i < ddl.Items.Count; i++)
{
ddl.SelectedIndex = i;
str = ddl.SelectedItem.Text;
for (int counter = i + 1; counter < ddl.Items.Count; counter++)
{
ddl.SelectedIndex = counter;
compareStr = ddl.SelectedItem.ToString();
if (str == compareStr)
{
ddl.Items.RemoveAt(counter);
counter = counter - 1;
}
}
}
}
תוצאה סופית:
האמת היא שהתחלתי לתכנת פתרון הרבה יותר קצר (4 שורות) וגם הרבה פחות 'כבד' - אפשר לראות, שכאן מריצים לולאת for בתוך לולאת for - סיבוכיות של (O(n2 שזה הרבה -
אבל זה עשה קצת בעיות ולא היה לי כוח להתעסק עם זה עוד, אז מצאתי את האלגוריתם הזה: http://dotnetguts.blogspot.com/2006/10/removing-duplicates-item-from.html
בהצלחה ...