SQL: קביעת רשימת ערכים מותאמת אישית
-
איך אפשר להכניס תיבה משולבת בתוך הדטהגריד שמחזיקה גם את המזהה וגם את הטקסט מהטבלה השניה?
DataGridComboBoxColumn.
צריך להכיר את המאפיינים:
ItemsSource צריך להכיל את הטבלה השניה (בעלת הארבעה ערכים).
נניח שיש לה עמודת ID ועמודה Description.DisplayMemberPath שם השדה/עמודה בטבלה השניה אותו אתה רוצה שיוצג בתצוגה, היינו Description.
SelectedValuePath העמודה שתייצג את הSelectedValue. במקרה שלנו UD. כלומר שיפנו למאפיין SelectedValue וישאלו ממנו את ערכו זה יחזיר את הערך מתוך שם העמודה המצויין, וכן להפך: כשיקבעו לSelectedValue ערך, השורה שתיבחר תהיה זו שבעמודה המצויינת הערך מתאים.
אחרי כן עושים למאפיין SelectedValue בינדינג לעמודה בטבלה הנוכחית שמכילה את הID הנכון במין הארבעה.סיבוך קטן...
פורסם במקור בפורום CODE613 ב09/07/2015 18:57 (+03:00)
-
@דוד ל.ט.
DataGridComboBoxColumn.
צריך להכיר את המאפיינים:
ItemsSource צריך להכיל את הטבלה השניה (בעלת הארבעה ערכים).
נניח שיש לה עמודת ID ועמודה Description.DisplayMemberPath שם השדה/עמודה בטבלה השניה אותו אתה רוצה שיוצג בתצוגה, היינו Description.
SelectedValuePath העמודה שתייצג את הSelectedValue. במקרה שלנו UD. כלומר שיפנו למאפיין SelectedValue וישאלו ממנו את ערכו זה יחזיר את הערך מתוך שם העמודה המצויין, וכן להפך: כשיקבעו לSelectedValue ערך, השורה שתיבחר תהיה זו שבעמודה המצויינת הערך מתאים.
אחרי כן עושים למאפיין SelectedValue בינדינג לעמודה בטבלה הנוכחית שמכילה את הID הנכון במין הארבעה.סיבוך קטן...
ניסיתי בטבלה של תרומות ליצור קומבובוקס של רשימת התורמים שבמערכת, כשבטבלה הוא שומר רק את הID אך בתצוגה הוא מציג את שם התורם.
לא בדיוק הצלחתי..
עקרונית ביצירה האוט' נוצר לי הקוד הבא, ולא הצלחתי למצוא שם את ההגדרות הללו (למרות שניסיתי..)<DataGridTemplateColumn x:Name="donorColumn" Header="מזהה תורם" Width="SizeToHeader"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <ComboBox> <ComboBoxItem Content="{Binding Donor}"/> </ComboBox> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn>
אשמח להסבר כיצד אפשר להגדיר באופן הנ"ל..
מחקתי אותו וכתבתי את הקוד הבא:
<DataGridComboBoxColumn x:Name="donorComboBox" ItemsSource="{Binding Source=avrTrumaDataSet, Path=Person}" DisplayMemberPath="FirstName" SelectedValuePath="ID" SelectedValueBinding="Donor" Header="מזהה תורם">
הבעיה שלי היא איך ליצור קישור לטבלה השניה, כיון שבהגדרות של החלון נקבעו ההגדרות לטבלה של התרומות, ואני רוצה ליצור קישור לטבלה של התורמים. לכן כתבתי שהסורס הוא לדטהסט, והpath הוא לטבלה השניה (person).
האם זה טוב? כי נראה לי שחסר משהו וזה לא בדיוק עובד לי..
כמו כן, איך אני יוצר קישור ל2 תאים שהרי אני לא רוצה שהוא יציג רק את השם הפרטי או המשפחה אלא את שניהם, האם זה אפשרי?תודה רבה רבה לכל העוזרים והמסייעים והטורחים לענות על שאלותי
פורסם במקור בפורום CODE613 ב14/07/2015 17:57 (+03:00)
-
שתי הדרכים טובות, אם כי שלך הנכונה במקרים פשוטים.
בעיקרון בדוגמתך יש טעות פשוטה: המאפיין SelectedValueBinding לא מקבל סטרינג אלא בינדינג ככה:SelectedValueBinding="{Binding Donor}"
וחוץ מזה זה אמור לעבוד.
שים לב שכל המאפיינים כתובים מדוייק (רגיש לרישיות!).פורסם במקור בפורום CODE613 ב14/07/2015 22:03 (+03:00)
-
תקנתי וכתבתי כך:
<DataGridComboBoxColumn x:Name="donorComboBox" ItemsSource="{Binding Source=avrTrumaDataSet,Path=Person}" DisplayMemberPath="FirstName" SelectedValuePath="ID" SelectedValueBinding="{Binding Donor}" Header="מזהה תורם" />
וזה לא עובד..
כלומר זה מציג תא ריק בטבלה, כשאני לוחץ עליו הוא פתאום מציג את הקומבובוקס ופותח לי רשימה ריקה כאילו יש בתוכה ערכים אבל הכל לבן..
ניסיתי לשנות את הקוד כך:<DataGridComboBoxColumn x:Name="donorComboBox" ItemsSource="{Binding Source={StaticResource avrTrumaDataSet},Path=Person}" DisplayMemberPath="FirstName" SelectedValuePath="ID" SelectedValueBinding="{Binding Donor}" Header="מזהה תורם" />
הוספתי את הסטטיק ריסורס, אבל התוצאה אותו דבר...
אציין רק שבתחילה הוא זרק לי שגיאה על הselectionChanged , ופשוט הוספתי מתודה בשם הזה, שלא עושה כלום (כיון שכרגע עוד אין לי מושג מה היא אמורה לעשות.. והשגיאה נעלמה :lol: ) אולי זה קשור?? אולי זה בגלל שלא באמת מימשתי את המתודה הנ"ל והיא אמורה לעדכן את הנתונים בקומבובוקס בזמן ריצה??
תודה רבה מראש!!פורסם במקור בפורום CODE613 ב15/07/2015 00:48 (+03:00)
-
בדקתי וזה לא עובד.
התוצאה היא כך:
כלומר הוא מציג רשימה נפתחת ריקה, אך הוא לא מציג את הנתונים..הקוד הוא זה: (השורה החשובה זו שורה מס' 25)
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:TrialSQL1" x:Class="TrialSQL1.AddTruma" Title="AddTruma" MinHeight="400" MinWidth="900" Loaded="Window_Loaded" FlowDirection="RightToLeft"> <Window.Resources> <local:AvrTrumaDataSet x:Key="avrTrumaDataSet"/> <CollectionViewSource x:Key="donoationViewSource" Source="{Binding Donoation, Source={StaticResource avrTrumaDataSet}}"/> </Window.Resources> <Grid DataContext="{StaticResource donoationViewSource}"> <Grid.RowDefinitions> <RowDefinition Height="40"/> <RowDefinition/> </Grid.RowDefinitions> <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Row="0" FontSize="18" FontWeight="Bold"><Run Text="הוסף תרומות"/></TextBlock> <DataGrid x:Name="donoationDataGrid" AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding}" Margin="10,75,0,189" Grid.Row="1" RowDetailsVisibilityMode="VisibleWhenSelected" SelectionChanged="donoationDataGrid_SelectionChanged"> <DataGrid.Columns> <DataGridTemplateColumn x:Name="idDonationColumn" Header="מזהה תרומה" IsReadOnly="True" Width="SizeToHeader"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding IdDonation}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridComboBoxColumn x:Name="donorComboBox" ItemsSource="{Binding Source={StaticResource avrTrumaDataSet},Path=Person}" DisplayMemberPath="FirstName" SelectedValuePath="ID" SelectedValueBinding="{Binding Donor}" Header="מזהה תורם" /> <DataGridCheckBoxColumn x:Name="isOneTimeColumn" Binding="{Binding IsOneTime}" Header="חד פעמי?" Width="SizeToHeader"/> <DataGridTextColumn x:Name="sumDonationColumn" Binding="{Binding SumDonation}" Header="סכום התרומה" Width="SizeToHeader"/> <DataGridTemplateColumn x:Name="startDateColumn" Header="תאריך התחלה" Width="SizeToHeader"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <DatePicker SelectedDate="{Binding StartDate, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTextColumn x:Name="numOfPaymentColumn" Binding="{Binding NumOfPayment}" Header="מספר תשלומים" Width="SizeToHeader"/> <DataGridTemplateColumn x:Name="deadlineColumn" Header="תאריך סיום" Width="SizeToHeader"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <DatePicker SelectedDate="{Binding Deadline, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn x:Name="howToPayColumn" Header="אופן התשלום" Width="SizeToHeader"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <ComboBox> <ComboBoxItem Content="{Binding HowToPay}"/> </ComboBox> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn x:Name="idMethodPayColumn" Header="מזהה אמצעי תשלום" Width="SizeToHeader"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <ComboBox> <ComboBoxItem Content="{Binding IdMethodPay}"/> </ComboBox> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid> </Grid> </Window>
בדקתי וכל ההפניות כתובת בצורה מדוייקת כך שאין לי מושג מה הבעיה.
תודה רבה!!פורסם במקור בפורום CODE613 ב19/07/2015 15:24 (+03:00)