כיצד אני קורא לפונקציה בעת שינוי בפקד dataGridView?
-
אני רוצה שכל שינוי בטבלה יישמר באופן מיידי בדאטהבייס, עשיתי כך, אבל הפונקציה "dataGridView1_CellValueChanged" כלל לא מופעלת, (הוספתי הודעה קופצת, ולא קורה כלום..)
private void SaveChanges() { try { using (OleDbConnection connection = new OleDbConnection(connectionString)) { connection.Open(); using (OleDbDataAdapter dataAdapter = new OleDbDataAdapter()) { using (OleDbCommandBuilder commandBuilder = new OleDbCommandBuilder(dataAdapter)) { dataAdapter.SelectCommand = new OleDbCommand("SELECT * FROM t1", connection); dataAdapter.UpdateCommand = commandBuilder.GetUpdateCommand(); dataAdapter.Update(dataTable); MessageBox.Show("Changes saved successfully."); } } } } catch (Exception ex) { MessageBox.Show("An error occurred while saving changes: " + ex.Message); } } private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) { MessageBox.Show("hi!"); dataGridView1.EndEdit(); SaveChanges(); } private void dataGridView1_RowValidated(object sender, DataGridViewCellEventArgs e) { MessageBox.Show("hi!"); dataGridView1.EndEdit(); SaveChanges(); }
-
@yossiz כתב בכיצד אני קורא לפונקציה בעת שינוי בפקד dataGridView?:
אתה לא מראה לנו בקוד שהפונקציה באמת מחוברת לאירוע CellValueChanged
כיצד מחברים את זה?
כעת הוספתי תיבת טקסט לסינון של הטופס, הסינון עצמו עובד, אבל שוב רק באמצעות לחיצה על כפתור שמפעיל מחדש את טעינת הטבלה, וכשניסיתי לעשות ככה
private void txtFilterName_TextChanged(object sender, EventArgs e) { LoadData(); }
זה גם לא עשה כלום...
-
אני חושב שאני מתחיל להבין...
יכול להיות שזה צריך להיות בקובץ דיזיינר? א"כ הנה זה
// dataGridView1 // this.dataGridView1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dataGridView1.Location = new System.Drawing.Point(12, 125); this.dataGridView1.Name = "dataGridView1"; this.dataGridView1.RightToLeft = System.Windows.Forms.RightToLeft.Yes; this.dataGridView1.Size = new System.Drawing.Size(1257, 576); this.dataGridView1.TabIndex = 0; // // txtFilterName // this.txtFilterName.Location = new System.Drawing.Point(998, 56); this.txtFilterName.Name = "txtFilterName"; this.txtFilterName.Size = new System.Drawing.Size(112, 20); this.txtFilterName.TabIndex = 1;
אני חושד בזה בגלל השורה הזו בדיזיינר של הלחצן שהוספתי..
this.button1.Click += new System.EventHandler(this.button1_Click);
-
@מוטי-מן כתב בכיצד אני קורא לפונקציה בעת שינוי בפקד dataGridView?:
הוספתי את זה ועובד
אני שמח שהבעיה נפתרה אבל לא הצלחתי להבין איך הקוד שהבאת קשור לבעיה שלך
א. מה אומר הthis
זו מילה שתמיד מצביע על האובייקט הנוכחי (מופע של הקלאס שבו מוגדר הפונקציה שבו נמצא המילה
this
)ב. מה זה ה=+
זו הדרך שבה נרשמים להאזין ל-
event
ב-#C
האובייקטtxtFilterName
מפרסם שהוא פולט "ארוע" בשםTextChanged
ואתה נרשם לקבל את האירוע על ידי הוספת פונקציה עם אופרטור+=
מעבר לזה קשה לי להסביר, תעיין במדריכי #C...
-
@מוטי-מן קובץ הדיזיינר הוא קובץ שנוצר אוטומטי בגלל פעולות משתמש במצב עיצוב של הטופס.
הדרך להוספת אירוע אינה שינוי של הקובץ ההוא, כי זה יידרס מיידית בשינוי הבא של הטופס.
הדרך היא לבחור את פקד הDGV במצב עיצוב, מעבר לחלונית המאפייינים, שמה בחירה ברשימת האירועים (יש סימן של ברק למעלה כמדומני), ברשימה הזו למצוא את האירוע וללחוץ עליו דבל קליק או להזין ידנית שם מתודה רצוי.מאחורי הקלעים כל דבר בחלונית העיצוב הופך לקוד, שרץ ע"י קריאה לInitializeComponent שיש בבנאי של המחלקה Form (אני כותב מזיכרון מקוה שדייקתי בפרטים).
-
@מוטי-מן כתב בכיצד אני קורא לפונקציה בעת שינוי בפקד dataGridView?:
@yossiz כתב בכיצד אני קורא לפונקציה בעת שינוי בפקד dataGridView?:
אני שמח שהבעיה נפתרה אבל לא הצלחתי להבין איך הקוד שהבאת קשור לבעיה שלך
מה הכוונה?
אירוע זה:
txtFilterName.TextChanged
לא נראה לי קשור כלל לבעיה המקורית שלךאני רוצה שכל שינוי בטבלה יישמר באופן מיידי בדאטהבייס
זה אמור להיות קשור לאירוע
CellValueChanged
של ה-DataGridView