I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Den anden del af spørgsmålet er hvordan jeg nemmest designer tabellene i databasen.Der skal gerne være muligt at gentage mønsteret et vilkårlig antal gange.
tjoh... der er jo lidt forskellige måder at gribe det an på.... jeg tror egentlig jeg ville koble dem ret hårdt sammen - og betragte det som én søgekontrol.
hvis vi siger du har et dataset (ds) med 3 tabeller T1, T2 og T3 med relationerne RT1_T2, og RT2_T3, kunne et skelet se ud lidt i denne stil : og... dropdownlisterne dd1, dd2 og dd3 (det er sådan lidt pseudoagtigt, og uden fejlcheck og fuldstændig ugenerisk - lige som i lige ud af landevejen :o).
desuden vil jeg tro det vil blive det letteste, rent perfomancemæssigt hurtigste, hvis du klasker datasætte i session - så du får lige denne :
// ved load henter du data, og fylder den første dropdown: ds = someDal.GetListData(); dd1.DataSource = ds.Tables["T1"]; // her sætter teksten til hvad den nu skal være, og value til nøglen du bruger i -relationen // altså dd1.DataTextField = ... dd1.DataValueField = ...
// og du vil så have nogle handlere til når der vælges i listerne:
void dd1_SelectedIndexChanged(...) { // du høster lige det row det drejer sig om int key = int.Parse(((DropDownList)sender).SelectedValue); DataRow dr = ds.Tables["T1].Rows.Find(key)[0]; dd2.DataSource = dr.GetChildRows("RT1_T2"); // her sætter du værdierne på samme måde som med som med dd1 dd2.DataBind(); }
void dd2_SelectedIndexChanged(...) { int key = int.Parse(((DropDownList)sender).SelectedValue); DataRow dr = ds.Tables["T2].Rows.Find(key)[0]; dd3.DataSource = dr.GetChildRows("RT2_T3"); dd3.DataBind(); }
void dd3_SelectedIndexChanged(...) { // der skal så nok ske noget helt andet her }
var det nok til at komme igang på ? (ellers må du sige til)
dc = this.Columns.Add("T2_String",typeof(string)); dc.DefaultValue = "T2"; } }
man skal ikke nødvendigvis lave det hele, man kan uden problemer tage et eksisterende dataset som bare er genereret udfra et "sug" i databasen, og proppe relationerne ind på det ved :
someDataSet.Relations.Add(...); og tilsvarende kan du på en eksisterende tabel sætte en nøgle ved : someDataSet.Tables[0].PrimaryKey = new DataColumn[] {someDataSet.Tables[0].Cloumns["Id"];
på ovenstående vil du så du lave noget som dette :
SomeDataSet ds = new someDatalayer().GetSomething();
foreach(DataRow dr in ds.Tables["T1"].Rows) { DataRow childRows = dr.GetChildRows("RelationT1_T2"); }
Så hvis du har fat i en specifik række i tabel 1 - og id'et fra denne, skulle du kunne få dine childrows på relationen :
DataRow[] dr = someRow.GetChildRows("RelationT1_T2");
Det kan være vældig praktisk, hvis du definerer nogle konstanter på dine klasser så du undgår indexering ved "RelationT1_T2"... Prøv at se denne :
public class SomeDataSet : DataSet { public const string RelationT1_T2 = "RelationT1_T2";
public SomeDataSet() { this.Tables.Add(new T1()); this.Tables.Add(new T2()); this.Relations.Add(RelationT1_T2, this.Tables[0].Columns["id"], this.Tables[1].Columns["id"]);
. . .
Det ville give muligheden for :
DataRow[] dr = someRow.GetChildRows(SomeDataSet.RelationT1_T2);
Samme trick kunne du lave med tabel- og kolonnenavne.
Så har du kun din egentlig navngivning stående ét sted med "" - og du henter den så der hver gang der er behov for det.
Var det skudt forbi - eller kan du bruge det til noget ?
Det var en stor mundfuld, men det gav god inspiration.
Jeg har dog valgt en anden løsning, som jeg kort viser her:
Jeg har tre tabeller, der den første (kategori) indeholder kategoriID og kategoriNavn, den anden (subKategori) indeholder subKategoriID, subKategoriNavn og kategoriNummer, og den tredje (producent) indeholder producentID, producentNavn og subKategoriNummer.
Når siden loader, er kun den første dropdown enabled.
jeg synes det er helt fint.... det er jo sådan set også samme model - og forskellen ligger bare i hvor meget du lægger i dit dataset. datasættet kan gå fra det helt generiske (hvis du f.eks. fylder et new DataSet() op med en adapter) - og til typestærke datasets med masser af specielle metoder og properties. den jeg skrev (altså den med datasættene) lander et sted midt imellem :o)
hvis listerne er nogle du skal bruge på andre sider - kunne du overveje at lægge dem i en selvstændig kontrol istedet....
mvh (jeg lægger et svar hvis du vil af med noget :o)
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.