Hi all,
You'll have to forgive me if I make a mistake here but I'm new here and have only been programming for 6 months whilst studying from home.
I am writing a WPF application using Csharp and DLINQ (TO SQL). I've created my DBML file using the designer and the whole application runs fine with one snag I can't seem to solve.
I have over 20 tables in the database, but only 3 are relevant here.
Table 1 is called "Territories" which contains two fields:
1.TerritoryID (Primary Key)
NON NULL
2.TerrritoryName
Table 2 is called "Permissions" which contains 3 fields - This simulates amany-to-many relationship between territories and distributors:
1.PermissionID (Primary Key) NON NULL
2.TerritoryID (Foreign Key On Territories.TerritoryID) NULL
3.DistributorID (Foreign Key On Distributors.DistributorID) NULL
Table 3 is called "Distributors" which contains 6 fields, one of which is important..
1.DistributorID (Primary Key) NON NULL
-------------------------
OK, I have a WPF window which contains the following (relevant only) code:
public partial class WdwDistributorProperties : Window
{
private ceDataContext ce = null;
private Distributor currentDist = null;
private Int32 callingSelectedIndex;
private BindingList distributorPermissions = null;
private WdwDistributorProperties()
{
InitializeComponent();
}
public WdwDistributorProperties(Distributor dist, Int32 currentSelectedIndex)
{
InitializeComponent();
ce = new ceDataContext("Integrated Security=true;Initial Catalog=ce;Data Source=localhost");
currentDist = ce.Distributors.Single(d => d.DistributorID.Equals(dist.DistributorID));
this.callingSelectedIndex = currentSelectedIndex;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.Title += String.Format("{0} {1}", this.currentDist.FirstName, this.currentDist.LastName);
IList permissionsList = ((IListSource)currentDist.Permissions).GetList();
distributorPermissions = permissionsList as BindingList;
this.lvPermissions.DataContext = distributorPermissions;
}
------The XAML for the relevant control is------
Territory Name
--------------------------
This works fine for displaying the Permissions.TerritoryID but I actually want it to dispay the meaningful Territories.TerritoryName column from the linked table.
I have created the option for a user to add new permissions which update the database correctly, and remove them - which only NULLs the Permissions.DistributorID column (not ideal but ce.SubmitChanges() will not delete the record - assuming because of the link between Permissions.TerritoryID and Territories.TerritoryID) so it will do for the moment.
Question 1:
How do I get the ListView (lvPermissions) to show the TerritoryName from the Territories table rather than the TerritoryID from the permissions table - but based on the relationship between them.
I wish I could just write...
Territory Name
...instead of the above XAML but I know you can't - what is a solution that will allow me show the TerritoryName whilst using the DBML automated code for updating the database?
Question 2:
Does anyone have a better solution to my Permissions table removal problem? The database has to be like it is (at least in my beginners opinion) because multiple distributors can have permissions to a territory and therefore a territory can have multiple distirbutors with permissions to it? Or Am I over complicating it?
There is another part of the application which when the distributor logs in, they will be able to view territories based on their perissions - hence why I have linked the tables!
Please help.
Thanks in advance - Csharp Corner's newest member (probably).