19. august 2004 - 15:06Der er
54 kommentarer og 1 løsning
Datagrid med flere data i et felt
Jeg har tre tabeller:
Moedetabel: moedeid dato
MedarbejderMoedetabel: moedeid medarbejderid
Medarbejdertabel: medarbejderid initialer
Jeg har et dataset, hvor jeg sætter initialer ind i en datgrid ud fra en dato og dataene vises også godt nok, men i hvert sit felt, og det jeg gerne ville have var, at medarbejderne med initialer med f.eks. moedeid 10 blev vist og der kan godt være flere med moedeid 10 og så ville jeg gerne have dem vist i et felt i datagriden som f.eks. jj, ek, ss i stedet for på flere linjer?
public System.Data.DataSet datoMetode(string dato) { string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Ole DB Services=-4; Data Source=D:\\Fam\\db1.mdb"; System.Data.IDbConnection dbConnection = new System.Data.OleDb.OleDbConnection(connectionString);
string queryString = "SELECT Moede.MoedeID, Medarbejder.Initialer FROM Medarbejder INNER JOIN (Moede INNER JOIN MedarbejderMoede ON Moede.MoedeID=MedarbejderMoede.MoedeID) ON Medarbejder.MedarbejderID=MedarbejderMoede.MedarbejderID WHERE Moede.Dato = @Dato"; System.Data.IDbCommand dbCommand = new System.Data.OleDb.OleDbCommand(); dbCommand.CommandText = queryString; dbCommand.Connection = dbConnection;
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Der er mange måde du kan gøre det på - men der er ikke rigtig nogen smutvej... F.eks. nedenstående :
Din source skal være så du kan lave en "autobinding (så skal du ud i en noget mere kompliceret sql).
Du laver et nyt objekt du kan binde til, og sørger for at fylde det op så det passer - er sådan set det samme som ovenstående... du laver det bare i din VB kode istedet.
Du laver din helt egen kontrol, og skriver databindingen selv (denne kan du så vælge at lave på mange forskellige måder).
Jeg har kigget på dit link, men får ikke rigtig noget ud af det. Har du ikke et link til en side med et eksempel på asp.net side med en datagrid, der har noget lignende det jeg skal bruge, så jeg kan se på et færdigt eksempel? Du skriver at jeg skal lave noget autobinding med noget mere kompliceret sql, men hvad er det for noget sql jeg skal bruge til det?
det jeg sendte et link til er sådan set et færdigt eksempel på at løse problemstillingen ved at generere en datakilde som du kan binde direkte til med det ønskede resulatat - altså at det der stod i rækker tidligere er lagt ind i én række som kommasepereret tekst.
det jeg mener med det mere komplicerede sql er, at du sådan set godt kan hente data op på en måde så det ser ud som du fordrer, men jeg er ikke speciel superhelt til at lave den slags sql, og synes egentlig også at en "formattering" som den du beskriver hører til lidt højere oppe i programmet - men det kan der jo være delte meninger om :o) (princippet er det samme... hvad enten du bruger sql-modellen eller C# modellen til det).
Jeg skal ikke afvise at der ligger mere færdige eksempler rundt omkring, men det er ikke noget generel kode du skal skrive... Du skal jo ændre på nogle forhold så de passer præcis til din præsentation under alle omstændigheder.
jeg vil meget gerne hjælpe dig yderligere, men så skal du lægge lidt mere af din kode herud - ellers kan jeg ikke fortælle dig hvor du skal proppe de ekstra ting ind.
Her er hele koden, hvor jeg har en datagrid og en kalender og når man trykker på en dato på kalender, bliver dataene vist i datagriden:
<%@ Page Language="C#" %> <script runat="server">
string dato = "";
public System.Data.DataSet datoMetode(string dato) { string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Ole DB Services=-4; Data Source=D:\\Fam\\db1.mdb"; System.Data.IDbConnection dbConnection = new System.Data.OleDb.OleDbConnection(connectionString);
string queryString = "SELECT Moede.MoedeID, Medarbejder.Initialer FROM Medarbejder INNER JOIN (Moede INNER JOIN MedarbejderMoede ON Moede.MoedeID=MedarbejderMoede.MoedeID) ON Medarbejder.MedarbejderID=MedarbejderMoede.MedarbejderID WHERE Moede.Dato = @Dato"; System.Data.IDbCommand dbCommand = new System.Data.OleDb.OleDbCommand(); dbCommand.CommandText = queryString; dbCommand.Connection = dbConnection;
// find alle unikke medarbejdere i den originale tabel og læg dem i collection StringCollection moeder = new StringCollection();
foreach(DataRow dr in dt.Rows) { if(moeder.IndexOf(dr["moedeid"].ToString()) == -1) moeder.Add(dr["moedeid"].ToString()); }
// lidt nips til brug en løkken DataRow[] medarbejderraekker = null; DataRow newRow = null; string resultingString;
// for hver unikt møde foreach(String moede in moeder) { resultingString = null;
// hentes alle rækker af medarbejdere medarbejderraekker = dt.Select(string.Format("moedeid={0}",moede));
// som lægges sammen til en kommasepareret string foreach(DataRow dr in medarbejderraekker) { resultingString += dr["initialer"].ToString() + ","; }
// fjern det sidste komma if(resultingString.Length>1) resultingString = resultingString.Remove(resultingString.Length-1,1);
// opret ny række til den nye tabel newRow = ndt.NewRow();
// sæt mødet ind newRow["moedeid"] = int.Parse(moede); // jeg går ud fra at dit id er en int
// og den resulterende streng newRow["initialer"] = resultingString;
// og rækken sættes ind i tabellen ntd.Rows.Add(newRow); } // og retur med tabellen return ndt; }
Jeg har taget det fra det spørgsmål jeg henviste til og rettet det lidt til i forholdt til det du har skrevet... jeg håber ikke jeg har misforstået alt for meget.
det er bare skrevet herude, så jeg ved ikke om det kan kompilere.
Nu er det kommet til at virke, men hvis der f.eks. skal stå "as, jj", så bliver det skrevet ud dobbelt som "as, as, jj, jj"? Hvordan tilføjer jeg ekstra data til datagriden, hvis f.eks. jeg gerne vil have vist datoen fra moede tabellen i datagriden sammen med initialer?
Hej krestionsen.... Jeg har som nævnt bare skrevet det herude, så der kan jo godt være en smutter, men jeg kan nu ikke lige få øje på den nu. Prøv at smid hele den kode du har nu ud - så tager jeg lige en kigger (databinder du måske 2 gange ?).
Nu har du jo valgt i basen udfra datoen, så hvis du vil nemt over det, kan du bare overføre datoen som parameter til CreateModifiedTable, så du laver dette kald return CreateModifiedTable(dataSet); om til return CreateModifiedTable(dataSet, dato);
og ændrer private DataTable CreateModifiedTable(DataSet ds) til private DataTable CreateModifiedTable(DataSet ds, string dato)
Så kan du tilføje den til den nye tabel i disse linier :
// opret ny række til den nye tabel newRow = ndt.NewRow();
// sæt mødet ind newRow["moedeid"] = int.Parse(moede);
// sæt datoen (parameter til metoden) ind newRow["dato"] = dato;
// og den resulterende streng newRow["initialer"] = resultingString;
// og rækken sættes ind i tabellen ntd.Rows.Add(newRow);
Hej snepnet, jeg vil lige sige, at jeg er meget taknemmelig for hjælpen og hvis du vil have nogle flere point, så er det bare iorden:)
Her er den kode, som jeg har lavet indtil nu og jeg synes ikke rigtig jeg kan se, at jeg databinder 2 gange, men det er du nok bedre til at se? Hvordan får jeg starttiden med, jeg har prøvet det du sagde, men har ikke rigtig kunne få det til at virke?
public System.Data.DataTable selectKalender(string dato) { string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("db1.mdb"); System.Data.IDbConnection dbConnection = new System.Data.OleDb.OleDbConnection(connectionString);
string queryString = "SELECT Moede.MoedeID, Moede.StartTid, Moede.SlutTid, Emne.Navn AS EmneNavn, Status.Navn AS StatusNavn, Part.Navn AS PartNavn, Medarbejder.Initialer, Ekstern.Navn AS EksternNavn FROM Ekstern INNER JOIN ((Status INNER JOIN (Part INNER JOIN (((Emne INNER JOIN Moede ON Emne.EmneID = Moede.EmneID) INNER JOIN (Medarbejder INNER JOIN MedarbejderMoede ON Medarbejder.MedarbejderID = MedarbejderMoede.MedarbejderID) ON Moede.MoedeID = MedarbejderMoede.MoedeID) INNER JOIN PartMoede ON Moede.MoedeID = PartMoede.MoedeID) ON Part.PartID = PartMoede.PartID) ON Status.StatusID = Moede.StatusID) INNER JOIN EksternMoede ON Moede.MoedeID = EksternMoede.MoedeID) ON Ekstern.EksternID = EksternMoede.EksternID WHERE (((Moede.Dato)=[@Dato])) ORDER BY Moede.StartTid;"; System.Data.IDbCommand dbCommand = new System.Data.OleDb.OleDbCommand(); dbCommand.CommandText = queryString; dbCommand.Connection = dbConnection;
// en klon System.Data.DataTable ndt = dt.Clone();
// find alle unikke medarbejdere i den originale tabel og læg dem i collection StringCollection moeder = new StringCollection();
foreach(System.Data.DataRow dr in dt.Rows) { if(moeder.IndexOf(dr["moedeid"].ToString()) == -1) moeder.Add(dr["moedeid"].ToString()); }
// lidt nips til brug en løkken System.Data.DataRow[] medarbejderraekker = null; System.Data.DataRow newRow = null; string resultingString;
// for hver unikt møde foreach(String moede in moeder) { resultingString = null;
// hentes alle rækker af medarbejdere medarbejderraekker = dt.Select(string.Format("moedeid={0}",moede));
// som lægges sammen til en kommasepareret string foreach(System.Data.DataRow dr in medarbejderraekker) { resultingString += dr["initialer"].ToString() + ","; }
// fjern det sidste komma if(resultingString.Length>1) resultingString = resultingString.Remove(resultingString.Length-1,1);
// opret ny række til den nye tabel newRow = ndt.NewRow();
// sæt mødet ind newRow["moedeid"] = int.Parse(moede); // jeg går ud fra at dit id er en int
// og den resulterende streng newRow["initialer"] = resultingString;
// og rækken sættes ind i tabellen ndt.Rows.Add(newRow); } // og retur med tabellen return ndt; }
Jeg kigger lige på det lidt senere.... men det kunne være fint hvis du sendte den kode hvor der databindes + din page_load, og hvad du ellers har der styrer "arbejdsgangen" i din kode. (der er ikke noget i det du har sendt der viser hvornår du databinder).
Her er så hele koden og jeg har været hende og se om jeg kunne finde fejlen og jeg er kommet så langt, at hvis jeg kører en metoden med denne sql forespørgsel, så virker det:
string queryString = "SELECT Moede.MoedeID, Medarbejder.Initialer FROM Medarbejder INNER JOIN (Moede INNER JOIN MedarbejderMoede ON Moede.MoedeID = MedarbejderMoede.MoedeID) ON Medarbejder.MedarbejderID = MedarbejderMoede.MedarbejderID WHERE Moede.Dato = @Dato;";
Men hvis jeg kører metoden med den sql forespørgsel, som jeg skal bruge, så skriver den navnene ud dobbelt og jeg har testet sql forespørgslen inde i access og det kommer den med de rigtige data og ikke dobbelt, så jeg tror ikke det er datbindingen den er gal med.
// en klon System.Data.DataTable ndt = dt.Clone();
// find alle unikke medarbejdere i den originale tabel og læg dem i collection StringCollection moeder = new StringCollection();
foreach(System.Data.DataRow dr in dt.Rows) { if(moeder.IndexOf(dr["moedeid"].ToString()) == -1) moeder.Add(dr["moedeid"].ToString()); }
// lidt nips til brug en løkken System.Data.DataRow[] medarbejderraekker = null; System.Data.DataRow newRow = null; string resultingString;
// for hver unikt møde foreach(String moede in moeder) { resultingString = null;
// hentes alle rækker af medarbejdere medarbejderraekker = dt.Select(string.Format("moedeid={0}",moede));
// som lægges sammen til en kommasepareret string foreach(System.Data.DataRow dr in medarbejderraekker) { resultingString += dr["initialer"].ToString() + ","; }
// fjern det sidste komma if(resultingString.Length>1) resultingString = resultingString.Remove(resultingString.Length-1,1);
// opret ny række til den nye tabel newRow = ndt.NewRow();
// sæt mødet ind newRow["moedeid"] = int.Parse(moede); // jeg går ud fra at dit id er en int
// og den resulterende streng newRow["initialer"] = resultingString;
// og rækken sættes ind i tabellen ndt.Rows.Add(newRow); } // og retur med tabellen return ndt; }
Der er flere data i moedetabel, end dem jeg har skrevet og det var for ikke at forvire alt for meget, med at vise data der ikke skulle bruges til det der skulle laves, men jeg kan godt skrive hele tabellens indhold, hvis du vil have det.
Det mærkelige er, at hvis jeg tester den sql som returnere dobbelt i access, så returnere den rigtigt nok og hvis jeg kobler den metode fra, som du har lavet og laver metoden selectKalender om til et dataset, så returnere den også rigtigt nok "as, jj".
Forstod ikke lige : "Det mærkelige er, at hvis jeg tester den sql som returnere dobbelt i access, så returnere den rigtigt nok " hvor returnerer den rigtigt nok så ?
Ja, sorry, det er skrevet lidt uforståeligt, men det jeg mente, var at hvis jeg tester sql'en i access, så returnere den ikke dobbelt, som den gør, når jeg bruge sql'en i min selectKalender metode.
Det vil sige at den returnere rigtigt nok i access.
Ja, hvis jeg tester sql'erne i access og hvis jeg laver metoden om til et dataset og ikke bruger din metode, så får jeg det rigtige antal rækker. Men hvis jeg så laver metoden om til en datatable og bruger din metode, så kikser den ene sql og udskriver navnene dobbelt og med den anden udskriver den navnene rigtigt. Jeg tror ikke det er din metode den er gal med og jeg tror heller ikke det er min sql, men der et eller andet der går helt galt af hinanden.
Kan du ikke debugge, og se hvad der sker på denne linie : medarbejderraekker = dt.Select(string.Format("moedeid={0}",moede)); med hhv den ene og den anden sql.
Jeg bruger Web Matrix og tror ikke man kan debugge i web matrix, men jeg låner lige visual studio med hjem i morgen og skriver lige, hvad der sker med den ene og den anden sql, når man debugger dem.
Ved den første sql, som er den jeg skal bruge, som ikke virker, der får jeg resultatetet 172172172172 og den anden får jeg resultatet 172172 og det passer også meget godt, da 172 er moedeid.
Jeg har prøvet med distinct, men der kommer følgende fejl:
Exception Details: System.Data.SyntaxErrorException: Syntax error: Missing operand after 'moedeid' operator.
Source Error:
Line 292: Line 293: // hentes alle rækker af medarbejdere Line 294: medarbejderraekker = dt.Select(string.Format("Distinct moedeid={0}",moede)); Line 295: Line 296:
Jeg har fundet fejlen, den lå i sql'en, hvor jeg har en ekstern medarbejder, som der også kan være flere af lige som medarbejder initialer og hvis der er flere af de eksterne medarbejdere, så skriver den medarbejder initialer dobbelt ud, men hvordan laver får jeg det til at virke så eksterne medarbejdere bliver skrevet ud lige som medarbejder initialer ud fra moedeid fra moede, så der også er komma mellem eksterne medarbejdere(navn) i den metode du har lavet?
hvis fejlen ligger i sql-en vil det nok være det bedste at rette det der... men måske har jeg misforstået dig.
der er rigtig mange der er bedre til at lave sql-er end jeg er, og hvis det er der det resterende problem ligger tror jeg næsten du er bedre hjulpet med at oprette den del af det som et nyt spørgsmål i en "sql-kategori".
det er bestemt ikke fordi jeg ikke vil kigge på det, men så ville jeg nok foretrække at du sendte creates og inserts til at lave en kopi af din base her - med indhold... skal jeg nok prøve at kigge på det. men - jeg tror at det andet vil være hurtigere for dig.
Ja, det er lidt dårligt forklaret, men problemet er at når der er flere ekstern medarbejdere, så går der ged i det, men jeg tror at problemet er løst hvis jeg komma separere ekstern medarbejder, da det er fordi jeg kun komma separere medarbejder initialer, fordi det virker fint nok, hvis jeg ikke komma separere medarbejder initialer, så derfor ville jeg høre, hvordan jeg både komma separere medarbejder initialer og ekstern navn på en gang?
Det er sådan set ikke sql'en, der er problemet(tror jeg), men at jeg kun komma separere medarbejder initialer, fordi det virker fint nok, hvis jeg kun har en medarbejder ekstern(navn) med på mødet, men hvis jeg har flere medarbejder ekstern(navn), så går det galt og den skriver medarbejder initialer dobbelt ud, så jeg tror det er fordi, at medarbejder ekstern(navn) skal komma separeres for at det virker, så derfor ville jeg høre, hvordan jeg både komma separere både medarbejder initialer og ekstern navn på en gang?
nåh.... du kan jo bare bruge den samme kode som den til medarbejdere... det er så bare ikke ét, men to kolonner du vil lave det samme trick på. var det det du mente ?
Ja, den skal være i en ny kolonne, men jeg kan ikke få det til at virke med begge to, så hvordan bruger jeg din kode og ligger over i hver sin kolonne?
kan du ikke poste et xml-dump fra et dataset der indeholder de data der giver dig dublerede lininer - så skal jeg nok kigge på det. (du kan se lidt højere op hvordan). mvh
Jeg kan ikke fortælle dig det med mindre jeg ved hvordan dit datasæt ser ud... Det var derfor jeg gerne ville have xml-en, men hvis du kan udvælge de rækker det drejer sig om på samme måde som med den interne medarbejder ville det vel være sådan noget her :
// lidt nips til brug en løkken System.Data.DataRow[] medarbejderraekker = null; System.Data.DataRow newRow = null; string resultingString; string newResultingString;
// for hver unikt møde foreach(String moede in moeder) { resultingString = null;
// hentes alle rækker af medarbejdere medarbejderraekker = dt.Select(string.Format("moedeid={0}",moede));
// som lægges sammen til en kommasepareret string foreach(System.Data.DataRow dr in medarbejderraekker) { resultingString += dr["initialer"].ToString() + ","; newResultingString += dr["andre_initialer"].ToString() + ","; }
// fjern det sidste komma if(resultingString.Length>1) resultingString = resultingString.Remove(resultingString.Length-1,1); if(newResultingString .Length>1) newResultingString = newResultingString .Remove(newResultingString .Length-1,1);
// opret ny række til den nye tabel newRow = ndt.NewRow();
// sæt mødet ind newRow["moedeid"] = int.Parse(moede); // jeg går ud fra at dit id er en int
// og den resulterende streng newRow["initialer"] = resultingString; newRow["andre_initialer"] = resultingString;
// og rækken sættes ind i tabellen ndt.Rows.Add(newRow); }
jeg har dog meget svært ved at forestille mig at ovenstående kan bruges til noget, da jeg ikke kan forestille mig at dine data
Der skulle have stået : jeg har dog meget svært ved at forestille mig at ovenstående kan bruges til noget, da det på det nærmeste vil kræve at din tabel ikke giver nogen mening overhovedet :o) (den interne og den eksterne skulle i givet fald stå side om side i tabellen, hvilket jeg har svært ved at tro at de gør).
Såh... igen... jeg bliver nødt til at se dit xml-dump, hvis jeg skal kunne hjælpe dig videre. mvh
Ja, så kom der endelig et xml-dump, som jeg har haft svært ved i visual studio, hvor den siger noget med noget sikkerhed, hvor jeg har prøvet en hel masse, men har ikke fået det til at lykkes og nu har jeg så prøvet med web matrix, hvor det endelig lykkedes:)
PS: tabellerne til ekstern medarbejder står under kl. 11:19
Her er et xml-dump, hvor den laver dobbelt data fordi der er flere eksterne medarbejdere og hvis du vil have et xml-dumb, hvor den gør det rigtigt med kun en ekstern medarbejder, så må du lige sige til.
Jeg har lige prøvet med en ekstern medarbejder og som du kan se under EksternNavn, så kommer de samme data, men ved initialer er det som det skal være:
hvis du vil fikse det i koden - skal du lave en ekstra løkke inde i løkken... lidt som det her :
// lidt nips til brug en løkken System.Data.DataRow[] medarbejderraekker = null; System.Data.DataRow newRow = null; string resultingString; string gæster;
// for hver unikt møde foreach(String moede in moeder) { resultingString = null;
// hentes alle rækker af medarbejdere medarbejderraekker = dt.Select(string.Format("moedeid={0}",moede));
// som lægges sammen til en kommasepareret string foreach(DataRow dr in medarbejderraekker) { string medarbejder = dr["initialer"].ToString() + ","; if(resultingString.IndexOf(medarbejder) != -1) continue;
resultingString += medarbejder;
// og så lidt gæster DataRow[] gæsteRækker = dt.Select(string.Format("(moedeid={0} AND initialer={1})",moede, medarbejder)); foreach(DataRow gæst in gæsteRækker) { gæster += gæst["EksternNavn"].ToString() + ","; }
// fjern det sidste komma fra gæstelisten if(gæster.Length>1) gæster = gæster.Remove(gæster.Length-1,1);
}
// fjern det sidste komma if(resultingString.Length>1) resultingString = resultingString.Remove(resultingString.Length-1,1);
// opret ny række til den nye tabel newRow = ndt.NewRow();
// sæt mødet ind newRow["moedeid"] = int.Parse(moede); // jeg går ud fra at dit id er en int
// og den resulterende streng newRow["initialer"] = resultingString;
// og gæsterne newRow["EksternNavn"] = gæster;
// og rækken sættes ind i tabellen ndt.Rows.Add(newRow); }
Meeeenn.... det er ved ved at være en lidt speget affære synes jeg. (jeg ved ikke om det bygger... jeg har bare skrevet det i notepad)
Ja, du må undskylde jeg ikke har været herinde i lang tid, men har lige fået nyt arbejde og sådan, men nu er jeg tilbage. Du har ret i, at det er ved, at være en speget affære og det sidste eksempel du gav mig, kan jeg ikke få til at virke og ville høre om jeg på en eller anden måde kunne sende dig min database og .aspx fil og få dig til at se på det og ligge løsningen herind og så får du 500 point?
hej krestionsen det kan vi godt sige (men man kan nu ikke give mere end 200 point på ét spørgsmål :o) hvis du skriver din email her, skal jeg nok skrive til dig - så kan du bare sende det tilbage. mvh
//og så lidt gaester string filter = string.Format("moedeid={0} AND Initialer='{1}'",moede,medarbejder); System.Data.DataRow[] gaesteRaekker = dt.Select(filter);
public System.Data.DataTable selectKalender(string dato) { string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("db1.mdb"); System.Data.IDbConnection dbConnection = new System.Data.OleDb.OleDbConnection(connectionString);
string queryString = "SELECT Moede.MoedeID, Moede.StartTid, Moede.SlutTid, Emne.Navn AS EmneNavn, Status.Navn AS StatusNavn, Part.Navn AS PartNavn, Medarbejder.Initialer FROM Medarbejder INNER JOIN ((Status INNER JOIN (Part INNER JOIN ((Emne INNER JOIN Moede ON Emne.EmneID=Moede.EmneID) INNER JOIN PartMoede ON Moede.MoedeID=PartMoede.MoedeID) ON Part.PartID=PartMoede.PartID) ON Status.StatusID=Moede.StatusID) INNER JOIN MedarbejderMoede ON Moede.MoedeID=MedarbejderMoede.MoedeID) ON Medarbejder.MedarbejderID=MedarbejderMoede.MedarbejderID WHERE Moede.Dato=[@Dato];";
// en klon System.Data.DataTable ndt = dt.Clone();
// find alle unikke medarbejdere i den originale tabel og læg dem i collection StringCollection moeder = new StringCollection();
foreach(System.Data.DataRow dr in dt.Rows) { if(moeder.IndexOf(dr["moedeid"].ToString()) == -1) moeder.Add(dr["moedeid"].ToString()); }
// lidt nips til brug en løkken System.Data.DataRow[] medarbejderraekker = null; System.Data.DataRow newRow = null; string resultingString;
// for hver unikt møde foreach(String moede in moeder) { resultingString = null;
// hentes alle rækker af medarbejdere medarbejderraekker = dt.Select(string.Format("moedeid={0}",moede));
// som lægges sammen til en kommasepareret string foreach(System.Data.DataRow dr in medarbejderraekker) { resultingString += dr["initialer"].ToString() + ","; }
// fjern det sidste komma if(resultingString.Length>1) resultingString = resultingString.Remove(resultingString.Length-1,1);
// opret ny række til den nye tabel newRow = ndt.NewRow();
// sæt mødet ind newRow["moedeid"] = int.Parse(moede); // jeg går ud fra at dit id er en int
// og den resulterende streng newRow["initialer"] = resultingString;
// og rækken sættes ind i tabellen ndt.Rows.Add(newRow); } // og retur med tabellen return ndt; }
Det virker godt med, at der er komma mellem medarbejderne. Problemet er at jeg ikke kan få vist de andre data(starttid, sluttid, emne, status og klient navn).
jeg synes du skal tage din sql og smide den ud i sql-kategorien, så får du nok et bud på en mere hensigtsmæssig måde at hente det op på. ... men... jeg synes du skal definere dig et dataset der er repræsentativt for de data du er interesseret i at vise frem.
det kunne f.eks. være MoedeDataSet Moeder InterneDeltagere EksterneDeltagere
og der skulle så være en relation mellem Moeder og InterneDeltagere, og Moeder og EksterneDeltagere. Så ville du i koden også kunne operere med en unik række med dine mødedata (istedet for at du får de samme oplysninger i mange rækker som nu), og du kunne så udfra moedeid'et hente de interne og eksterne deltagere via relationerner.
mvh du kan lige se et eksempel på et dataset med relation, og en måde at snuppe childrows via relationen. http://www.eksperten.dk/spm/554689
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.