SQL: קביעת רשימת ערכים מותאמת אישית
-
האם ישנה אפשרות לקביעת רשימת ערכים מותאמת אישית בעמודה מסויימת בטבלה של SQL?
לדוגמא, יש לי עמודה ששמה: תרומה חד פעמית, ואני רוצה שהערך יהיה כן/לא האם ישנה אפשרות כזאת?
או למשל יש עמודה של אמצעי תשלום, ואני רוצה שיהיו שם 4 אפשרויות: מזומן, שיק, אשראי, הו"ק. האם אפשר להגדיר מראש שזה יכלול את 4 הערכים הללו?
תודה רבה מראש!פורסם במקור בפורום CODE613 ב08/07/2015 23:37 (+03:00)
-
כן/לא = סוג נתונים BIT.
לגבי להחזיק רשימת ערכים, מקובל לעשות טבלה נוספת, שנקרא לה "אמצעי תשלום" לצורך הדוגמא, ובה יהיו 2 עמודות:
מספר,תיאור
1,מזומן
2, שיקים
3, אשראיוכו' וכו'
ככה אתה יכול להוסיף כמה אמצעי תשלום שתרצה, ואם יום אחד יבקשו ממך להוסיף פייפל (לדוגמא), פשוט אתה מוסיף לטבלה הזו ואז זה נמצא בממשק.
בטבלה של התרומות אתה שם עמודה מסוג INT ובעצם אתה מחזיק תיבה משולבת שמציגה את הטקסט מהטבלה "אמצעי תשלום" אבל בפועל שומרת רק את המזהה (העמודה של המספר)
פורסם במקור בפורום CODE613 ב08/07/2015 23:51 (+03:00)
-
בטבלה של התרומות אתה שם עמודה מסוג INT ובעצם אתה מחזיק תיבה משולבת שמציגה את הטקסט מהטבלה "אמצעי תשלום" אבל בפועל שומרת רק את המזהה (העמודה של המספר)
את התיבה המשולבת אני יוצר בטופס שלי ולא בדטה בייס, נכון?
פורסם במקור בפורום CODE613 ב08/07/2015 23:56 (+03:00)
-
איך אפשר להכניס תיבה משולבת בתוך הדטהגריד שמחזיקה גם את המזהה וגם את הטקסט מהטבלה השניה?
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)