הוספת שורה שורה לDataSet
-
ניסיתי לפעול בצורה שונה: להגדיר שורה חדשה, להזין את הנתונים עמודה, עמודה, ואח"כ לעדכן הכל.
לכאו' זה עובד מצויין. הבעיה שלי שאח"כ אני בודק בדטהבייס עצמו, ואני לא רואה שם את הנתונים.
זה הקוד:private void Update_Click(object sender, RoutedEventArgs e) { try { TrialSQL1.AvrTrumaDataSet avrTrumaDataSet = ((TrialSQL1.AvrTrumaDataSet)(this.FindResource("avrTrumaDataSet"))); var donor = avrTrumaDataSet.Person.NewPersonRow(); if(donor==null) { return; } donor["FirstName"] = firstNameTextBox.Text; donor["LastName"] = lastNameTextBox.Text; donor["Adress"] = adressTextBox.Text; donor["Telefon"] = telefonTextBox.Text; donor["Telefon2"] = telefon2TextBox.Text; donor["Email"] = emailTextBox.Text; if (MaleRadioButton.IsChecked == true) { donor["Gender"] = true; } else donor.Gender = false; avrTrumaDataSet.Person.AddPersonRow(donor); avrTrumaDataSet.AcceptChanges(); TrialSQL1.AvrTrumaDataSetTableAdapters.PersonTableAdapter avrTrumaDataSetPersonTableAdapter = new TrialSQL1.AvrTrumaDataSetTableAdapters.PersonTableAdapter(); avrTrumaDataSetPersonTableAdapter.Update(avrTrumaDataSet.Person); } catch(Exception ex) { MessageBox.Show("Eror: " + ex.Message, "Errors", MessageBoxButton.OK, MessageBoxImage.Error); } } } }
תוודה מראש!!
פורסם במקור בפורום CODE613 ב14/07/2015 10:09 (+03:00)
-
תסיר את השורה 25:
avrTrumaDataSet.AcceptChanges();
הערות נוספות:
-
כיון שהשתמשת עם Typed Data Set, אזז חבל לך להשתמש עם אינדקסרים סטרינגיים (donor["FirstName"]) השתמש במקום זאת במאפיינים (donor.FirstName).
-
התנאי בשורה 8 לא יתקיים אף פעם, ולכן הוא מיותר.
-
את התנאי בשורה 18 תוכל לפשט, ולכתוב בשורה אחת ככה:
donor.Gender = MaleRadioButton.IsChecked == true;
פורסם במקור בפורום CODE613 ב14/07/2015 11:39 (+03:00)
-
-
לפני שאני מסתכל על ההודעה, ומתחיל לחפש אשמים
הDB שלך זה קובץ פיזי?כן, יצרתי אותו בעצמי דרך ה SQL Server studio.
@ClickOneאולי הVS משכתב אותו בכל הפעלה מחדש שלך?
קרה לי בעבר.מה פירוש "משכתב אותו", ומה הכוונה קובץ פיזי? יש קובץ וירטואלי??
אשמח אם תבהיר את הדברים לבורים שכמוני
תודה רבה!
@דוד ל.ט.תסיר את השורה 25:
הערות נוספות:-
כיון שהשתמשת עם Typed Data Set, אזז חבל לך להשתמש עם אינדקסרים סטרינגיים (donor["FirstName"]) השתמש במקום זאת במאפיינים (donor.FirstName).
-
התנאי בשורה 8 לא יתקיים אף פעם, ולכן הוא מיותר.
-
את התנאי בשורה 18 תוכל לפשט, ולכתוב בשורה אחת ככה:
donor.Gender = MaleRadioButton.IsChecked == true;
תודה רבה! אכן אחרי שהסרתי את השורה 25 הוא מעדכן.
לגבי האינדקסרים, בהתחלה יצרתי newrow מהטבלה, ואז לא יכלתי בדרך אחרת, אח"כ ראיתי שאפשר ליצור newPersonRow (כלומר שורה מהטבלה שלי) ואז הוא אכן מציג לי את המאפיינים. אשמח ליתר פירוט על ההבדל ביניהם.פורסם במקור בפורום CODE613 ב14/07/2015 15:07 (+03:00)
-
-
ClickOne לא התכוון וירטואלי כמשמעו, אלא מצב בו אתה בוחר לשים את המסד-כקובץ בתוך הפרוייקט, הוא הוא מקבל הגדרה Copy Alaws לתיקיית הBin. מה שקורה שכל הרצה במסגרת הVS מוחקת את הקודם וממילא השינויים עימו.
הNewRow זה מתודה בDataTable. אם תשים לב תראה שאתה לא משתמש בDataTable כי אם בטיפוס שיורש ממנו.
בDataTable אין מאפיינים לכל עמודה, כי הוא מעוצב לעבודה עם כל טבלה שהיא מכל מסד שהוא. המתודה NewRow מחזירה DataRow חדש, שזה אובייקט שמכיל מערך ערכים, שהפניה אליהם נעשית ע"י אינדקסר מיקום או שם עמודה (הוא מכיר את השמות בזמן ריצה ע"י האבא שלו: הDataTable).
משא"כ הטיפוס שהנך משתמש עימו נקרא Typed Data Table כלמור כזה DataTable שכבר יועד ועוצב בזמן עיצוב לטבלה ספציפית, כאשר לכל שדה יש מאפיין מתאים וכו'. אז בעוד המתודה NewRow היא שארית מDataTable הגנרי וחסר הטיפוסיות, אז ישנה מתודה חדשה בשם NewXxxRow שמחזירה טיפוס יורש מDataRow בו יש מאפיין פר עמודה.פורסם במקור בפורום CODE613 ב14/07/2015 15:18 (+03:00)