-
יש לי טבלה דינאמית (Datagridview) שמקבלת נתונים לפי שאילתה מSQL
ואני מעוניין לקבל לתיבת טקסט (textbox) מידע שלא מופיע בתוצאת השאילתה
אלא לקבל מידע מהSQL לפי בחירת התא/שורה בטבלהדוגמא:
הטבלה מכילה עמודה 'מזהה', 'שם המוצר', 'כמות'
ואני מעוניין בבחירת תא/שורה לקבל לתיבת טקסט את המידע 'שם הלקוח' שלא מופיע בתוצאת השאילתה המוצגת בטבלהמישהו יכול לעזור בתחביר?
-
@mekev מדובר על ווינפורם / WPF או ווב?
הדרך הקלאסית היא, להאזין לאירוע בחירת שורה, ואז לפנות שוב לDB לפי המזהה ולקבל את הערך ואז להציג אותו.
אם זה ווינפורם, אתה יכול לשים אותו גם כעמודה מוסתרת, ופשוט לשלוף מהעמודה ולהציג אותו לפי האינדקס.
(עקרונית אפשר לעשות את זה גם בווב, אם זה לא נתון שחייב להיות מוחבא, אלא רוצים רק "לא להציג אותו" בטבלה.)
אם תכתוב את הפלטפורמה, יהיה קל יותר לתת דוגמא ממשית
בהצלחה
-
@clickone
מדובר על ווינפורםהעדיפות כמובן על לקבל את הערך של ה'מזהה' בבחירת שורה - ולפנות לSQL לקבל את המידע הנוסף
הקוד של השאילתה:
SqlConnection conn = new SqlConnection("שם שרת");
SqlCommand cmd = new SqlCommand("SQL שאילתת", conn);
conn.Open();
DataTable dt = new DataTable();
using (SqlDataAdapter Sda = new SqlDataAdapter(cmd))
{
Sda.Fill(dt);
conn.Close();
}
dataGridView.DataSource = dt;הקוד הקיים לתיבת טקסט לקבלת מידע מהתוצאה בטבלה:
textBox.Text = (string)dataGridView.CurrentRow.Cells["שם מוצר"].Value; -
WinForms נכון לעכשיו נתמכת.
@mekev תוסיף כזאת שורת קוד:
dataGridView.SelectionChanged += (se, ev) => { var id = dataGridView.SelectedRows[0].Cells["מזהה"].Value; var cmd = new SqlCommand("SELECT * FROM X WHERE מזהה = @id", conn); cmd.Parameters.AddWithValue("id", id); var reader = cmd.ExecuteReader(); if(reader.Read()) { textBox.Text = reader["שם עמודה"].ToString() + " " + reader["שם עמודה2"].ToString(); } };
לשם הנוחות בהסברה השתמשתי בפונקציית חץ, אבל תוכל לעשות פונקציה נפרדת לחלוטין.
כמו"כ רישום האירוע הוא ע"י קוד במקום ע"י הדיזיינר (המעצב של הויזואל סטודיו ע"י יצירת אירוע בחלונית האירועים) יש לזה ייתרון שכל עוד לא התמלאו נתונים האירוע לא נרשם.בהצלחה.
עריכה: כעת אני רואה שקראת לclose של הקונקשין אז צריך לפתוח אותה בקוד, או ליצור קונקשיין כל פעם.
-
קוד מתוקן לקוננקשיין חדש:
dataGridView.SelectionChanged += (se, ev) => { var id = dataGridView.SelectedRows[0].Cells["מזהה"].Value; using (var newCon = new SqlConnection(conn.ConnectionString)) using (var cmd = new SqlCommand("SELECT * FROM X WHERE מזהה = @id", conn)) { newCon.Open(); cmd.Parameters.AddWithValue("id", id); var reader = cmd.ExecuteReader(); if (reader.Read()) textBox.Text = reader["שם עמודה"].ToString() + " " + reader["שם עמודה2"].ToString(); newCon.Close(); } };
-
@mekev
אני מבין מדבריך שאתה מעוניין שהעמודה כן תהיה בdataGridView (ויוכלו לגשת דרך Cell["hidden col"]) רק שלא תוצג.
במידה והבנתי אותך, התשובה היא שאין לזה קשר להגדרה בשאילה, אלא שאחרי המילוי כלומר שורה אחרי השורהdataGridView.DataSource = dt;
להסתיר את העמודה:dataGridView.Columns["sodi"].Visible = false;
-