Avatar billede donpedrodelavega Nybegynder
02. juli 2003 - 00:11 Der er 21 kommentarer og
1 løsning

Alternativ til Databinder-klassens Eval-metode

Er der nogle der har et bud på et godt alternativ til at bruge DataBinder.Eval(object, string) ?

Referencer til artikler/diskussioner der behandler emnet godtages selvf.

/ DP
Avatar billede quaser Nybegynder
02. juli 2003 - 00:18 #1
Jeg synes da det fungere udemærket, hvis du ikke gør synes jeg da at du skal komme med en begrundelse, og så kan vi måske finde en løsning på det problem.
Avatar billede donpedrodelavega Nybegynder
02. juli 2003 - 00:19 #2
noget á la dette eksempel(bare helst noget der baerer mere frugt end dette eksempel)
http://www.dotnet247.com/247reference/msgs/2/11319.aspx

/ DP
Avatar billede donpedrodelavega Nybegynder
02. juli 2003 - 00:23 #3
DataBinder.Eval benytter latebound vurdering på runtime-tidspunkt gennem brug af reflection. Det er derfor indlysende at den resulterer i bemærkelsesværdig dårlig performance sammenlignet med standard ASP.NET databinding syntax.

/ DP
Avatar billede disco_keld Nybegynder
02. juli 2003 - 00:24 #4
get a life......

hvad skal man bruge et alternativt til?!?!?!?

Hvis du endelig vil gøre det på en anden måde, så send da et objekt af typen System.Object som du binder dine data til, i dit datatilgangs lag.

Mvh

DK
Avatar billede donpedrodelavega Nybegynder
02. juli 2003 - 00:27 #6
På ovenstående link er der ca. halvvejs nede på siden en advarsel mod at bruge denne børnevenlige metode.

disco-fætter >>
Da det ikke er sjældent at de systemer jeg laver har 10.000+ brugere er det af afgjort betydning...

/ DP
Avatar billede donpedrodelavega Nybegynder
02. juli 2003 - 00:28 #7
for de der taler eng.:

"CAUTION  Since this method performs late-bound evaluation, using reflection, at runtime, it can cause performance to noticeably slow compared to standard ASP.NET data-binding syntax."

/ DP
Avatar billede donpedrodelavega Nybegynder
02. juli 2003 - 00:30 #8
...og som det fremgaar har foerste postede link er jeg ikke den eneste der er faldet over omkostningerne ved at benytte DataBinder.Eval...

...men det selvf. kan vaere at de ogsaa bare mangler at få et liv (disco-anders)

/ DP
Avatar billede donpedrodelavega Nybegynder
02. juli 2003 - 00:41 #9
anyways...
Jeg er noedt til at lukke og slukke...

disco >>
hvis du har mod på det kan du jo forklare hvad du mener med at "sende et objekt af typen System.Object som du binder dine data til, i dit datatilgangs lag" ?
Jeg forstår ikke helt hvad du mener...

/ DP
Avatar billede donpedrodelavega Nybegynder
02. juli 2003 - 12:18 #10
hmmm...
det var ikke mange der havde noget konstruktivt at bringe til diskussionen om denne fremgangsmaade.
Fra mit synspunkt tilhoerer denne fremgangsmaade (DataBinder.Eval) en af disse som programmmoerer elsker grundet dens lette implementering og som de derfor ikke taenker naermere over.
Det kraever ikke meget indsigt i .NET arkitekturen for finde ud af at denne boernevenlige metoder ofte har en hoej pris et andet sted (robusthed || performance). Den bruger latebinding og reflection som er to ting der burde faa en .NET programmoer til at standse op og lede efter alternativer... ogsaa selv om fremgangsmaaden goer det muligt at skrive mere kode paa kortere tid.

Sum: enhver programmoer der ikke hedder "middelmaadig" til mellemnavn boer ikke bruge DataBinder.Eval hvor man ikke er noedsaget til dette...

/ DP
Avatar billede disco_keld Nybegynder
02. juli 2003 - 14:35 #11
jeg vil meget gerne vise hvad jeg mener, men først skal du forklare mig hvad der er galt i og binde sine data til en kontrol på denne måde her:

text='<%# DataBinder.Eval(Container.DataItem, "Price") %>'

what's wrong with that?!?!?!
Avatar billede quaser Nybegynder
02. juli 2003 - 14:44 #12
Det har han skrevet:
"DataBinder.Eval benytter latebound vurdering på runtime-tidspunkt gennem brug af reflection. Det er derfor indlysende at den resulterer i bemærkelsesværdig dårlig performance sammenlignet med standard ASP.NET databinding syntax."
Avatar billede disco_keld Nybegynder
03. juli 2003 - 08:47 #13
>> quaser

ja okay, men nu når du siger "standard" ASP.NET databinding syntax, må jeg så ikke se hvad du mener med standard? Det er jo et vidt begreb...

lidt kode vil være dæjli'....

:-)
Avatar billede quaser Nybegynder
03. juli 2003 - 09:26 #14
>> disco keld
Jeg ved ikke hvad standard er, så det må være op til donpedrodelavega
Avatar billede disco_keld Nybegynder
03. juli 2003 - 09:45 #15
Oki....

>>> donpedrodelavega er du der? :-)

Hvis man hurtigt skal have loopet indholdet fra en database igennem, så er det effektivt og databind sine data til en server kontrol som et datagrid, datalist eller en repeator.

Men hvad hvis man kun skal have udskrevet et felt?

Så er det måske lidt overkill og anvende et datagrid eller datalist kontrol.

Man kan eksempelvis binde sine data, til en label kontrol som følgende:

----------------------------------------------------------------------------
'ProfileDetails objektet
Public Structure ProfileDetails
    Public Profile As String
End Structure

-----------------------------------------------------------------------------
'Datatilgangs laget

Public Function GetProfile() As ProfileDetails
            Dim oConnection As New SqlConnection(DB("DataBase"))
            Dim oCommand As New SqlCommand
            Dim oDataReader As SqlDataReader
            Try
                oConnection.Open()
                With oCommand
                    .Connection = oConnection
                    .CommandText = "spGetProfile"
                    .CommandType = CommandType.StoredProcedure
                    oDataReader = .ExecuteReader(CommandBehavior.CloseConnection)
                End With
                Dim oDetails As New Library.ProfileDetails
                While oDataReader.Read
                    With oDetails
                        .Profile = oDataReader("Profile").ToString
                    End With
                End While
                oDataReader.Close()
                Return oDetails
            Catch ex As Exception
                Throw ex
            End Try
        End Function

-----------------------------------------------------------------------------
'Code-behind (UI)

Dim oProfile As New Data.Profile
Dim Details As Library.ProfileDetails = oProfile.GetProfile
With lblProfile
  .Text = Details.Profile
End With

-------------------------------------------------------------------------------

Læg mærke til Profile fieled i Structuren. Ved at instantiere den Structure, som i øvrigt er af typen Value Type, tager jeg en kopi af den og har her Profile fieled tilrådig. I datatilgans laget, opretter jeg en metode som returnere netop det data fra databasen, som jeg har bundet til Profile objektet.

Dette objekt kan jeg ved hjælp af en variabel reference, binde til min label kontrol:

.Text = Details.Profile

Det er genialt..... :-)
Avatar billede donpedrodelavega Nybegynder
03. juli 2003 - 11:12 #16
ASP.NET databinding standard >>
tja... som i begge er inde paa er det lettere at naevne hvad der ikke er og det kan her med sikkerhed siges at brug af DataBinder klassen IKKE er...
nu kan jeg ioevrigt citere baade MSDN og mig selv naar jeg skriver "...slow compared to standard ASP.NET data-binding syntax.".

disco >>
du foreslaar altsaa at man bruge valuetype structures i codebehind og webcontrols i praesentation som alternativ til DataBinder klassen ?

/ DP

btw.
http://www.eksperten.dk/spm/372063
Avatar billede disco_keld Nybegynder
03. juli 2003 - 11:29 #17
>>> DP

hmmmm.....

>> du foreslaar altsaa at man bruge valuetype structures i codebehind ?

ikke generelt, men hvis man opretter et sådan objekt som ikke indeholder andet, så er det ikke nødvendigt at lave en Class. Men det er op til en selv...

>> webcontrols i praesentation som alternativ til DataBinder klassen ?

Nu ved jeg ikke helt hvad du mener her, men jeg plejer da at gøre sådan her når jeg looper noget igennem fra db med en datalist webkontrol.

f.eks.:

<asp:datalist
  id="dlNews"
  runat="server"
  repeatcolumns="1"
  repeatdirection="Vertical"
  repeatlayout="Table"
  >
  <itemtemplate>
      <asp:hyperlink
        id="lnkNews"
        runat="server"
        text='<%# DataBinder.Eval(Container.DataItem, "Topic") %>'
        navigateurl='<%# "../../News.aspx?PageID=5&newsid=" &DataBinder.Eval  (Container.DataItem, "NewsID") %>'
    />
  </itemtemplate>                           
</asp:datalist>   

Hvis jeg ikke skal loope dataene igennem, så anvender jeg blot ovenstående eksempel hvor:

With lblProfile
  .Text = Details.Profile
End With

er en label webkontrol

<asp:label id="lblProfile" runat="server">
Avatar billede donpedrodelavega Nybegynder
04. juli 2003 - 12:28 #18
disco >>
ovenstaaende eksempel benytter DataBinder hvilket vil sige at data ikke bindes paa det ordinaere DataBind tidspunkt. Det vil sige def. paa latebound.
Standard ASP.NET databinding techniques indebaerer at data bindes paa eventen DataBind og ikke andre...

btw...
http://www.eksperten.dk/spm/372554

/ DP
Avatar billede disco_keld Nybegynder
04. juli 2003 - 13:27 #19
lad mig se en standard databinding technique!
Avatar billede burningice Nybegynder
16. juli 2003 - 14:52 #20
d_k>> som nævnt, så skal databinding foregå i OnDataBind-eventen, evt. ved hjælp af subklassing

protected override void OnDataBinding(EventArgs e) {
  Label minLabel = (Label)dlNews.FindControl("lblProfile");
  minLabel.Text = "hej";

  base.OnDataBinding(e);
}
Avatar billede disco_keld Nybegynder
17. juli 2003 - 08:28 #21
>> CF

Davs du....! :-)

Jamen der kan man bare se. Den havde jeg lige ikke lige set før, den teknik der.

Det er da fee....

Men nu når du siger, subclassing. Hvad mener du med det begreb?
Avatar billede burningice Nybegynder
17. juli 2003 - 20:27 #22
subklassing er når du udvider en eksisterende klasse ved hjælp af nedarving. F.eks. i dette tilfælde, hvor man ville lave en ny klasse der arver fra System.Web.UI.WebControls.Datalist, og i den override OnDataBinding.
Istedet for at subklasse kan man dog gøre brug af DataBinding-eventen som findes i Datalist-klassen, hvilket måske umiddelbart ikke er så omstændigt. Om der er nogle perfomance-mæssige forskelle ved at gøre det på den ene eller den anden måde skal jeg dog ikke kunne svare på på stående fod :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester