-
יש לי טבלה דינאמית (Datagridview) שמקבלת נתונים לפי שאילתה מSQL
ואני מעוניין לקבל לתיבת טקסט (textbox) מידע שלא מופיע בתוצאת השאילתה
אלא לקבל מידע מהSQL לפי בחירת התא/שורה בטבלהדוגמא:
הטבלה מכילה עמודה 'מזהה', 'שם המוצר', 'כמות'
ואני מעוניין בבחירת תא/שורה לקבל לתיבת טקסט את המידע 'שם הלקוח' שלא מופיע בתוצאת השאילתה המוצגת בטבלהמישהו יכול לעזור בתחביר?
-
יש לי טבלה דינאמית (Datagridview) שמקבלת נתונים לפי שאילתה מSQL
ואני מעוניין לקבל לתיבת טקסט (textbox) מידע שלא מופיע בתוצאת השאילתה
אלא לקבל מידע מהSQL לפי בחירת התא/שורה בטבלהדוגמא:
הטבלה מכילה עמודה 'מזהה', 'שם המוצר', 'כמות'
ואני מעוניין בבחירת תא/שורה לקבל לתיבת טקסט את המידע 'שם הלקוח' שלא מופיע בתוצאת השאילתה המוצגת בטבלהמישהו יכול לעזור בתחביר?
-
יש לי טבלה דינאמית (Datagridview) שמקבלת נתונים לפי שאילתה מSQL
ואני מעוניין לקבל לתיבת טקסט (textbox) מידע שלא מופיע בתוצאת השאילתה
אלא לקבל מידע מהSQL לפי בחירת התא/שורה בטבלהדוגמא:
הטבלה מכילה עמודה 'מזהה', 'שם המוצר', 'כמות'
ואני מעוניין בבחירת תא/שורה לקבל לתיבת טקסט את המידע 'שם הלקוח' שלא מופיע בתוצאת השאילתה המוצגת בטבלהמישהו יכול לעזור בתחביר?
@mekev מדובר על ווינפורם / WPF או ווב?
הדרך הקלאסית היא, להאזין לאירוע בחירת שורה, ואז לפנות שוב לDB לפי המזהה ולקבל את הערך ואז להציג אותו.
אם זה ווינפורם, אתה יכול לשים אותו גם כעמודה מוסתרת, ופשוט לשלוף מהעמודה ולהציג אותו לפי האינדקס.
(עקרונית אפשר לעשות את זה גם בווב, אם זה לא נתון שחייב להיות מוחבא, אלא רוצים רק "לא להציג אותו" בטבלה.)
אם תכתוב את הפלטפורמה, יהיה קל יותר לתת דוגמא ממשית
בהצלחה
-
יש לי טבלה דינאמית (Datagridview) שמקבלת נתונים לפי שאילתה מSQL
ואני מעוניין לקבל לתיבת טקסט (textbox) מידע שלא מופיע בתוצאת השאילתה
אלא לקבל מידע מהSQL לפי בחירת התא/שורה בטבלהדוגמא:
הטבלה מכילה עמודה 'מזהה', 'שם המוצר', 'כמות'
ואני מעוניין בבחירת תא/שורה לקבל לתיבת טקסט את המידע 'שם הלקוח' שלא מופיע בתוצאת השאילתה המוצגת בטבלהמישהו יכול לעזור בתחביר?
-
@mekev ועוד שאלה, הפרטים שאתה אומר שכבר קיימים, מוצמדים ללקוח? או שהם נתונים לא קשורים ואתה צריך "להשיג" באיזו דרך מי הלקוח? (או האם מדובר במקרה שיש קשר ברור בין הלקוח לפריט - כגון פריטים בחשבונית)
@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; -
יש אירוע של בחירת שורה
Winform כבר לא נתמך ע"י Microsoft. לעומת wpf שעדיין נתמך. (יש תמיכה ב net5), לגבי שאילתא מ db כדאי להשתמש entity framework יאפשר לך גמישות עם db.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 של הקונקשין אז צריך לפתוח אותה בקוד, או ליצור קונקשיין כל פעם.
-
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
שיהיה עמודה מוסתרת/בלתי מוצגת@mekev
אני מבין מדבריך שאתה מעוניין שהעמודה כן תהיה בdataGridView (ויוכלו לגשת דרך Cell["hidden col"]) רק שלא תוצג.
במידה והבנתי אותך, התשובה היא שאין לזה קשר להגדרה בשאילה, אלא שאחרי המילוי כלומר שורה אחרי השורהdataGridView.DataSource = dt;
להסתיר את העמודה:dataGridView.Columns["sodi"].Visible = false;
-
D dovid העביר נושא זה מ-תכנות ב-