26. oktober 2004 - 15:10Der er
20 kommentarer og 1 løsning
DataList med flere Tables som sources
Jeg har en DataList, hvori jeg gerne vil have adgang til værdier fra to forskellige tabeller. Hvordan får jeg lettest adgang til disse værdier indenfor mit
er det hver række i listen du gerne vil have sammensat af data fra flere tabeller, eller er det fordi du gerne vil have nogle værdier fra den anden tabel ind som f.eks. en liste i ét enkelt felt i listen ? (er det en art master-detail ting, eller skal rækken bare sammensættes af indholdet fra to tabeller, med en én til én relation imellem) mvh
Ja, det er hver række i listen, jeg gerne vil have sammensat af flere forskellige tabeller. Fx har jeg en tabel, der hedder "Hole". Her vil jeg bruge to rækker fra med navnet "yellow_tee_length" og "red_tee_length". Og så har jeg en tabel med navnet "Course_Hole", hvori jeg vil bruge "hole_no". Tilsammen skal de så fx udgøre linjerne:
// sorry... der er lidt hektiskt her :o) // du kan lige få et hurtigt eksempel her.... håber du kan læse lidt af det - ellers må du spørge // princippet er bare at du laver en ny tabel, som du samler af de andre - der er andre måder.
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls;
using ExpArticles.ExpData;
namespace EXP2 { public class agertoft : System.Web.UI.Page { protected System.Web.UI.WebControls.DataGrid DataGrid1;
// vi samler det her i en ny tabel DataTable dt = new DataTable(); dt.Columns.Add("id",typeof(int)); dt.Columns.Add("T1_String",typeof(string)); dt.Columns.Add("T2_String",typeof(string));
foreach(DataRow dr in ds.Tables[0].Rows) { DataRow newrow = dt.NewRow(); newrow[0] = (int)dr["id"]; newrow[1] = dr["T1_String"].ToString(); newrow[2] = dr.GetChildRows(SomeDataSet.RelationT1_T2)[0]["T2_String"]; dt.Rows.Add(newrow); }
public class SomeDataSet : DataSet { public const string RelationT1_T2 = "RelationT1_T2"; public SomeDataSet() { this.Tables.Add(new T1()); this.Tables.Add(new T2());
Jo det bliver du nødt til, hvis du vil skrive kode som det her : dr.GetChildRows(SomeDataSet.RelationT1_T2)[0]["T2_String"]; (men det kan du jo så også bare lade være med når du er sikker på at der er 1-1 :o) mvh
Men jeg kan ikke helt finde ud af, hvordan jeg "oversætter" det til min egen applikationer. Jeg bruger jo ikke statiske tabeller, men tabeller fra min SQL database. Jeg har to DataTable's:
..og det er så dem, jeg vil have samlet. Jeg skal bruge tabellen udelukkende til visning af data, hvis det har noget at sige. Dvs jeg behøver ikke tage højde for auto-increment osv..
Sådan som jeg prøvede at konvertere dit eksempel var ved slet ikke at definere T1 og T2-klasserne. Og resten prøvede jeg at tilpasse min SQL tabeller, men jeg kan kun få den til at tage fat i værdier fra den éne DataTable i min nye DataTable...
det var også tanken at du bare tog dit eksisterende dataset - det er ikke særlig meget af den kode jeg har sendt du skal bruge. (grunden til at du fik så meget var at det helst skulle virke, så du kunne se fidusen).
men det du skal bruge/gøre noget ved er :
// her skal du angive de kolonner du vil have med fra de to tabeller - f.eks. DataTable dt = new DataTable(); dt.Columns.Add("hole_no",typeof(int)); dt.Columns.Add("Yellow_Tee",typeof(string)); dt.Columns.Add("Red_Tee",typeof(string));
// og i nedenstående fylder du så noget i den nye tabel foreach(DataRow dr in ds.Tables[0].Rows) { DataRow newrow = dt.NewRow(); newrow[0] = (int)dr["hole_no"]; newrow[1] = dr["Yellow_Tee"].ToString();
// det det er den linie her der kræver relationen.... newrow[2] = dr.GetChildRows(SomeDataSet.RelationT1_T2)[0]["T2_String"]; dt.Rows.Add(newrow); }
(har ikke så meget tid, men er tilbage igen i aften :o)
Jeg har ikke fået kigget på din metode. Jeg vil meget gerne sætte mig ind i det, men det tager nok lige lidt tid. Og da jeg er lidt presset, da jeg skal aflevere projekt næste fredag, tog jeg den lette løsning (og den mest forkerte); jeg lavede en ny metode i mit datalag, der med en SQL streng hentede og sorterede alt det jeg havde brug for i en tabel i et dataset. Det dataset sendte jeg så op til præsentationslaget ved metodekald og lavede Datalistens DataBind() på denne tabel.
Det virker, men jeg bryder mig ikke om selve løsningen. Det er et projekt, jeg skal arbejde videre på efter aflevering, så jeg vil optimere koden der.
Men du skal ikke snydes for point - tak for hjælpen ;)
..men det kan være jeg starter en tråd om dette igen, når jeg har fået kigget på dit sidste svar, og stadig ikke fået løst problemet :)
du kan også bare spørge videre her... det er helt fint :o) (det var ikke for at punke dig... det var fordi jeg ville henvise til dette spørgsmål i en anden forbindelse - hvor det også var noget med relationer på datasets - at jeg lige kom forbi).
håber alt går fint med projektet.
hold dig munter :o) /snep
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.