webForumDet fria alternativet

Binda List till DataGridView= HUR???

.NET

22 svar · 1 359 visningar · startad av CatZ · sida 2 av 2

Frågan, av CatZ

Jag och kollegan sitter och håller på att bli tokiga på att inte kunna binda en IList eller List till en DataGridView i en forms application. Hur är det meningen att man ska göra? Vi har läst på alla möjliga ställen om bindinglist och bindingsource men lyckas inte... hur \\\ ska man göra? :e

Läs frågan i sin helhet →
Medlem sedan jan. 20022 440 inlägg
#21

Nu har jag inte alls hunnit titta på det du skrev Nickemannen... men när jag försöker kalla på metoden med

GetWrappedList<AlarmDataStructHolder, AlarmDataStruct>(IEnumerable<<alarmlist>);

så får jag att

Visual Studio 2008 skrev:

The type
'EFTest.AlarmDataStructHolder'
cannot be used as type parameter
'TClass'
in the generic type or method
'GetWrappedList<TClass,TStruct>(System.Collections.Generic.IEnumerable<TStruct>)'.

There is no implicit reference conversion
from
'EFTest.AlarmDataStructHolder'
to
'EFTest.Form1.IStructHolder<EFTest.AlarmDataStruct>'

Jag är inte med riktigt men jag ska studera det lite senare ;)

Medlem sedan juni 20008 205 inlägg
#22

Nickemannen skrev:

Activator.CreateInstance är inte så snabb så denna lösning bör fungera bättre.

[I]*** snip[/I]
            TClass wrappedStructClass = new TClass();

Faktum är att en generisk new är långsammare än ett anrop till Activator.CreateInstance (och därmed MYCKET långsammare än vanliga konstruktoranrop), och involverar faktiskt ett anrop till just Activator.CreateInstance. Jag har inte satt mig in tillräckligt mycket i den IL-koden det ger upphov till, men skulle gissa att följande kod...

class X<T> where T : new()
{
    public T Create()
    {
        return new T();
    }
}

... är likvärdig med följande:

class X<T> where T : new()
{
    public T Create()
    {
        try
        {
            return Activator.CreateInstance<T>();
        }
        catch (TargetInvocationException e)
        {
            throw e.InnerException;
        }
    }
}

Man får således ingen prestandavinst av new om man gör det på en parametriserad typ, tvärtom. Däremot beter sig koden mer som man skulle förvänta sig.

Medlem sedan aug. 20003 575 inlägg
#23

hmm, det stämmer nog, fick det nog lite om bakfoten när jag antog att generics genererade kod som sedan kompilerades. :S

252 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)