Gå til innhold

Anbefalte innlegg

Skrevet

Heisan

Sett at man har følgende tabell struktur:

 

Poststeder -->> Kontakter

 

Så har man følgende LINQ uttrykk:

var kontakter = from k in db.Kontakter
			select k;

 

Dermed har jeg en iQueryable<Kontakter> som inneholder alle kontaktene med tilhørende poststed

 

Jeg ønsker dermed å vise navn og poststed i en datagridview, men i selve datagrid viewet så kommer kontaktens relaterte post opp som et slags uttrykk for relasjonen og ikke selve verdien. Hvordan kan jeg endre dette by code?

 

Jeg setter jo opp datagrid viewet slik:

dgvKunder.DataSource = kontakter;
foreach (DataGridViewColumn c in dgvKunder.Columns)
{
 c.Visible = false;
}
dgvKunder.Columns["Kontaktnavn"].Visible = true;
dgvKunder.Columns["Kontaktnavn"].ColumnText = "Kundenavn";

dgvKunder["Hva skal det stå her for postdstedet"].Visible = True;
....

All hjelp mottas selvsagt med takk....

Videoannonse
Annonse
Skrevet

Hvis jeg ikke bommer helt her, så har du jo mistet hele relasjonen til poststed i det du henter ut bare kontaktene og vil vel derfor få et issue med å vise dem. Den første LINQ queryen må bli en join mellom begge tabellene skulle jeg tro...hvis jeg har forstått ting riktig.

Skrevet

nei. En LINQ query tar med seg alt som er definert i databasen. Det vil si at følgende er mulig:

var kunde = (from k in db.Kontakter 
		 where k.KundeID = 1234
		 select k).FirstOrDefault();
MessageBox.Show(k.Fulltnavn + " bor i " + k.Poststeder.Poststed + " med postnummer = " + k.Poststeder.Postnr);

Dette for kunn en record. Skal man ha et helt datasett kan man gjøre slik:

var kunder = from k in db.Kontakter
		 select k;
foreach(Kontakt k in kunder)
 MessageBox.Show(k.Fulltnavn + " bor i " + k.Poststeder.Poststed + " med postnummer = " + k.Poststeder.Postnr);

som gir en liste

Ganske fancy serru. Poenget er at LINQ jobber veldig tett imot SQL serveren og oppbyggingen av SQL databasen er veldig sentralt. Jeg synes iallefall dette er kjempekult og sparer meg for masse koding

Skrevet (endret)

humm....så "Poststeder -->> Kontakter" er ikke en en-til-mange relasjon? Hvis Kontakt objektet ditt består av mange Poststeder, så er det litt misvisende. Eller er Poststeder propertyen på Kontakt objektet egentlig Postaddresse? scratch det der...tenkte (ikke) litt fort her xD

 

Jeg er forsåvidt klar over hvordan LINQ fungerer, men det var litt uklart hvordan ting er sydd sammen i koden din etter bare å ha lest første post :)

 

Tror jeg har det klart hvordan ting er hos deg nå...må bare tenke litt videre hvordan det skal løses ^^

Endret av The Jackal
Skrevet

private void Form1_Load(object sender, EventArgs e)
	{
		List<Kontakt> kontakter = new List<Kontakt>();
		Kontakt kontakt = new Kontakt();
		kontakt.Fornavn = "Per";
		kontakt.Etternavn = "Hansen";
		PostAddresse addresse = new PostAddresse();
		addresse.PostNummer = 0192;
		addresse.PostSted = "Oslo";
		kontakt.PostAddresse = addresse;
		kontakter.Add(kontakt);

		kontakt = new Kontakt();
		kontakt.Fornavn = "Ole";
		kontakt.Etternavn = "Olsen";
		addresse = new PostAddresse();
		addresse.PostNummer = 0195;
		addresse.PostSted = "Oslo";
		kontakt.PostAddresse = addresse;
		kontakter.Add(kontakt);

		var query = from k in kontakter
					select new {k.FulltNavn, k.PostAddresse.PostNummer, k.PostAddresse.PostSted};

		dataGridView1.DataSource = query.ToList();
	}

 

Dette fungerer fint hos meg i alle fall...håper det kan være litt til hjelp :) Griden vil da automatisk bygge seg opp med kolonner og 2 rader.

Skrevet

Jeg er ikek ute etter noen ting som helst her fordi alt som hr med database ting å gjøre er allerede håndtert i LINQ. Jeg vil bare vise de relaterte postene i resultatsettet jeg i en datagrid

Skrevet
private void Form1_Load(object sender, EventArgs e)
	{
		List<Kontakt> kontakter = new List<Kontakt>();
.........
		kontakter.Add(kontakt);

		var query = from k in kontakter
					select new {k.FulltNavn, k.PostAddresse.PostNummer, k.PostAddresse.PostSted};

		dataGridView1.DataSource = query.ToList();
	}

 

Dette fungerer fint hos meg i alle fall...håper det kan være litt til hjelp :) Griden vil da automatisk bygge seg opp med kolonner og 2 rader.

Ja. dette er en måte å gjøre det på, men det burde ikke være nødvendig å påvirke resultatsettet. Dessuten vil en slik måte å gjøre det på ta vekk en del grunnleggende funksjonalitet som følger med i Linq2SQL. Eksempelvis vil alle endringer man gjør i de relaterte postene bli lagret ved neste SubmitChangeds(). Gjør man det på denne måten som du viser til så må man også ta hensyn til alle disse tingene manuellt.

 

Kansje en løsning vil være å legge til en ny kolonne og heller styre innholdet av denne på en eller annen måte.

Skrevet

Problemet her *tror* jeg er at DataGridViewTextBoxColumn (som jeg tror er default kolonnetype) ikke har DisplayMember property, eller no lignende. Hvis du ikke gjør det på måten jeg gjorde, eventuelt overrider ToString() på Poststeder klassen din til å returnere den stringen du vil ha i kolonnen, så tror jeg du må lage din egen kolonnetype for å fikse det, eller lage en egen CellTemplate til kolonnen :) Dette er forøvrig ganske lett i WPF :p

Skrevet

hmmm. Mange som snakker om WPF om dagen. Tell me more, tell me more-...

 

Hvordan bruker jeg WPF? Er det bare å designe på vanlig måte? Eller er dette mere vridd i retningen hvordan man lager WEB sider?

Skrevet

Tja...det ligner jo ikke html i det hele tatt...men selve GUIen på appikasjonen skrives i XAML (xml lignende syntaks). Dvs...du kan fint utforme selve GUI ved hjelp av drag'n'drop som i vanlig forms, eller du kan velge å skrive markupen selv.

 

Nå finnes det faktisk ikke en datagrid i default WPF, men MS har releaset en WPFToolKit hvor du får det du trenger, og jeg tror planen er at dette etterhvert blir en del av default installasjonen (C# 4.0 sikkert). Den kan lastes ned her: http://www.codeplex.com/wpf

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...