tjo , foreach är ett hett tips *S* .. på vilket sätt beskriver din lösning hur man får fram vilka kolumner som finns i en lista (är det en ilist som innehåller objekt så får ju objektens properties agera kolumner) , har kollat ännu mer på CurrencyManager nu.. Currency managern är inblandad, och bindingcontext. nu finns en liten screenshot på grid eländet jag knåpar på nu..Implementera databinding
håller på med en ny kontroll nu.
(oke det är en grid)
som ska gå att koppla datakällor till.
min fråga är nu , finns det något i själva .net för att hämta data ur en datasource?
eftersom en datasource kan ju vara allt från en datatable till en IList.
(<b>jag undrar INTE hur man läser ur en databas så inga länkar till dataaccess buildingblocks eller så tack!</b>)
finns det någon databindings klass som kan exponera data från datakällan till mig utan att jag behöver veta om det är en datatable eller en ilist som är bunden???
jag vill ju bara ha tillgång till rader/kolumner/fält , sedan om dessa kommer från en datarow eller från ett objekt i en arraylist är ju inte intressant.
så , finns det något som fixar detta eller måste jag bygga wrappers som exponerar samma interface för alla tänkbara datakällor??? (det är vad jag gjort nu , men det verkar ju konstigt om detta inte finns inbyggt...)
dekompilerade delar av winforms datagridden och såg då att det finns någon bindingbasemanager , bindingcontext och en currencymanager ... och det verkade inte finnas någon kod som kollade om man bundit en datatable elle IList till datagridden...
så därför så kan man ju gissa att dessa klasser går att använda till detta på något sätt???
eller???
//Roger Sv: Implementera databinding
Alla datakällor (datatable, Ilist, IBindingCollection OSV) stödjer foreach.
När du sedan skall hämta datan för fälten, måste du använda dig av ngn evaluerings funktion för att antingen ropa på en egenskap, eller på ett index. DataBinder.Eval används i ASP.NET, vet inte om du kan använda den i Windows applikationer. Men det borde i alla fall ge dig en lite bättre utgångsposition.Sv: Implementera databinding
hur får jag fram vilka "child" rader en rad(/objekt) har?
som jag skrev i min första post , jag har redan gjort ett wrapper libb som kan exponera ut data från dessa på ett gemensammt sätt , dock känns det som
att allt detta borde finnas färdigt eftersom tex datagridden i windowsforms redan kan göra allt detta ... inklusive hantera rader med child rader..
har kollat lite mer på detta och det verkar iaf som det är CurrencyManager som ansvarar för att exponera värden från den underliggande tabellen/listanSv: Implementera databinding
och den klarar iaf de grundläggande sakerna..
ett litet exempel som visar hur man kan plocka ut värden från fält i rader från en datakälla..
(obs denna kod kan bara köras om den pejstas i en kontroll eller formulär eftersom den använder sig av bindingcontext)
<code>
CurrencyManager myCurrencyManager;
ArrayList ar=new ArrayList ();
ar.Add (new Point (10,20));
ar.Add (new Point (12,23));
ar.Add (new Point (13,24));
ar.Add (new Point (14,25));
ar.Add (new Point (15,26));
myCurrencyManager = (CurrencyManager)this.BindingContext[ar];
PropertyDescriptorCollection pdc= myCurrencyManager.GetItemProperties ();
//visa kolumner
foreach (PropertyDescriptor pd in pdc)
{
Console.WriteLine (pd.Name + " " + pd.PropertyType.ToString ());
}
//visa alla 'rader'
foreach (object o in myCurrencyManager.List)
{
Console.WriteLine (o);
}
//visa värdet av "X" i alla rader
foreach (object o in myCurrencyManager.List)
{
Console.WriteLine (pdc["X"].GetValue (o));
}
</code>
har dock inte kollat vad som händer om man kopplar en datatabell mot denna koden.
det kanske skiter sig rejält när man läser propps från en datarow via propertydescriptors :P
[edit]
nu har jag testat och det funkar prima :)
så nu gäller det bara att kunna plockaut childrader..
[/edit]Sv: Implementera databinding
Satt precis med anakrinon och försökte följa anrops kedjan för data sourcen, men går in i en återvändsgränd vid RecreateDataRows och SetDataRows, lyckas inte klura ut hur de gjort i datagridden. Sv: Implementera databinding
www.compona.com/newgrid.jpg
den bör vara i någon form av alphaläge om en vecka eller två.
så om någon vill betatesta lite senare så skicka gärna ett imail..
//Roger