lesz belőle. Együtt lehet eltüntetni a tartalmát
MultiView és View – Több View közül az ActiveViewIndex által megadott renderelődik
Wizard – View-ből áll – WizardStep kollekció • StepType=Start | Step | Finish | Complete
Internetes alkalmazásfejlesztés
117
Web vezérlőelemek (ListControls) ListBox, DropDownList, BulletedList, RadioButtonList, CheckBoxList – Items kollekció elemei ListItem objektumok Text és Value tulajdonságadatokkal – DataSource és DataMember (adatforrások) – DataTextField, DataValueField (összekapcsolás) – DataTextFormatString – SelectedIndex, SelectedItem, SelectedValue – SelectedIndexChanged esemény – AppendDataBoundItems=true • Az előtte felvettek benne maradnak, így lehet a (Mind)-et beilleszteni Internetes alkalmazásfejlesztés
118
Web vezérlőelemek (Navigáció) Hyperlink – NavigateURL property Button – PostBackUrl=másik lap is lehet • Page.PreviousPage éri el a korábbi lapot, és prevPage.FindControl(„txtData”) éri el a controlt • <%@ PreviousPageType VirtualPath=„x.aspx„ %> esetén a Public Property-k prevPage.Prop1 módon is elérhetők
SiteMapPath – Web.sitemap file kell • <siteMap xmlns… <siteMapNode url=„…” title=„…” decription=„…”/>… Internetes alkalmazásfejlesztés
119
Web vezérlőelemek eseménykezelése Csak szerveroldali eseményekre reagál • Click-típusú események • Listadobozoknál Change-típusúak (pl. SelectionChanged)
esemény=„metódusnév” • Pl. onclick=„valami” • Itt az onclick jelenti azt, amit a HTML vezérlőelemnél az onserverclick jelentett
autoPostBack tulajdonság • Ha true, akkor egy change típusú esemény is azonnal a szerverhez fordul
Internetes alkalmazásfejlesztés
120
Adatellenőrző vezérlőelemek Tipusok: – – – – –
RequiredFieldValidator CompareValidator RangeValidator RegularExpressionValidator CustomValidator
Ellenőrzés helye – Kliens (Javascript kezelő böngészőknél) – Szerver (a többi böngészőnél) Internetes alkalmazásfejlesztés
121
Közös tulajdonságok controlToValidate="Ellenőrzendő control ID-je" errormessage="Hibaüzenet szövege" display="dynamic" vagy "static" vagy "none" – static=fix helyet foglal el a képernyőn – dynamic=ha nincs hiba, akkor nem foglal el helyet
enableClientScript="true" vagy "false"
Internetes alkalmazásfejlesztés
122
CompareValidator Összehasonlítás egy konstanssal vagy egy másik vezérlőelem értékével – ValueToCompare="konstans" vagy ControlToCompare="másik vezérlőelem ID-je" – Type="String" | "Integer" | "Date" | "Double" | "Currency" – Operator="Equal" | "NotEqual" | "GreaterThan" | "GreaterThanEqual" |LessThan" | "LessThanEqual" | "DataTypeCheck"
Internetes alkalmazásfejlesztés
123
RangeValidator Értéktartomány ellenőrzés – MinimumValue="konstans" – MaximumValue="konstans" – Type="String" | "Integer" | "Date" | "Double" | "Currency"
Internetes alkalmazásfejlesztés
124
ValidationSummary Page.isValid="true" esetén jelenik meg Az adott lap összes hibáját kiírja Az eredeti ellenőrző vezérlőelemek helyén ilyenkor "*" jel íratható ki –
*
Internetes alkalmazásfejlesztés
125
RegularExpressionValidator Minta alapján történő ellenőrzés – ValidationExpression="formátum" – Példa adószámra: • ValidationExpression="[0-9]{8}-[0-9]-[0-9]{2}"
Internetes alkalmazásfejlesztés
126
Az ADO.NET alapjai
ADO .NET
Internetes alkalmazásfejlesztés
128
Connection objektum Kétféle típusa van: • SQLConnection (SQLServer 7.0, 2000) • OLEDBConnection (a többi esetén)
ConnectionString (SQLConnection-nél) • Data Source=.. vagy Server=.. ; Initial Catalog=.. vagy Database=.. ; Integrated Security= vagy Trusted_Connection=sspi; vagy User ID=.. Pwd=..
Connection String (OLEDBConnection-nél) • Provider=..; a többi ugyanaz • ODBC-t nem támogat (külön ODBC .NET provider kell) Internetes alkalmazásfejlesztés
129
Connection példa Dim conDB = new SQLConnection() conDB.ConnectionString="Integrated Security=SSPI;Initial Catalog=northwind" conDB.open()
Az open nem kötelező Dataset esetén
Internetes alkalmazásfejlesztés
130
Command objektum Kétféle típusa van: • SQLCommand (SQLConnection-nél) • OLEDBCommand (OLEDBConnection-nél)
Konstruktor paraméterek • CommandText (Maga az SQL mondat) • Connection (Az xxxConnection objektum) • Transaction (A Transaction objektum)
Egyéb tulajdonság • CommandType=CommandType.StoredProcedure | .TableDirect | .Text (default) • Parameters Internetes alkalmazásfejlesztés
131
Command objektum metódusai ExecuteScalar • Az eredményhalmaz első sorának első oszlopát adja
ExecuteReader • DataReader (Sql vagy OleDb) objektumot szolgáltat
ExecuteXmlReader • XmlReader objektumot szolgáltat
ExecuteNonQuery • Végrehajtja a megadott DDL vagy DML utasítást • Visszaadja az érintett sorok számát • Output paraméterek feltöltődnek Internetes alkalmazásfejlesztés
132
SqlParameter objektum Konstruktor paraméterek: • ParameterName (pl. "@SzlaSzam") • SqlDbType (pl. SqlDbType.Int) • Size (a méret byte-ban, pl. 4)
Egyéb tulajdonságok • Direction = ParameterDirection.Input | Output | InputOutput | ReturnValue • Value (A paraméter értéke írható és olvasható) • SourceColumn (Dataset-nél az eredeti oszlop neve)
Internetes alkalmazásfejlesztés
133
SqlCommand paraméterei Paraméter hozzáadása SQLCommand-hoz – cmdSqlCom.Parameters.Add(Para1) • ahol Para1 egy SqlParameter objektum
Paraméterérték írása, olvasása: – cmdSqlCom.Parameters("@Szla").Value="11" – Az Executexxx után output paraméterre is
A visszaadott érték átvétele – cmdS.Parameters("@RETURN_VALUE"). Value
Internetes alkalmazásfejlesztés
134
DataReader objektum Két típusa van: • SqlDataReader • OleDbDataReader
Az xxCommand.ExecuteReader hozza létre • Saját konstruktorral nem lehet létrehozni!
Csak előrefele olvasható adathalmaz Nyitott xxConnection kell hozzá • A végén le kell zárni a Readert és a Connection-t
Memóriakímélő Internetes alkalmazásfejlesztés
135
DataReader tulajdonságok és metódusok Read metódus • A következő sor beolvasása • "False"-t ad vissza, ha nincs több rekord (EOF)
Item (default property) • dr.Item("SzlaSzam").Value vagy dr(1).Value • Object-et ad vissza, ezért gyakran CType kell
GetValues (tömböt vár és tölt fel) GetOrdinal("SzlaSzam") IsDbNull(i) • "true", ha az oszlop DbNull Internetes alkalmazásfejlesztés
136
DataReader példa Dim cmdPartner As SqlCommand=new SqlCommand( "SELECT PartAzon,PartNev FROM Partner",conDB) conDB.open() Dim rdrPartner As SqlDataReader rdrPartner=cmdPartner.ExecuteReader() Do While rdrPartner.Read() ListBox1.Items.Add(rdrPartner.GetInt16(0) & vbTab & _ rdrPartner.getString(1)) Loop rdrPartner.Close() I = rdrPartner.RecordsAffected ' -1-et ad, mert SELECT conDb.Close()
Internetes alkalmazásfejlesztés
137
Több Recordset kezelése Tárolt eljárás több eredményhalmazt is adhat vissza, ha több SELECT van benne rdrPartner.NextResult() megy rá a következő rekordhalmazra A RecordsAffected összeadja az INSERT, UPDATE, DELETE által érintett rekordokat
Internetes alkalmazásfejlesztés
138
Tranzakciókezelés ADO .NET-ben SqlConnection.BeginTransaction adja vissza az SqlTransaction objektumot. A tranzakció hatálya alá tartozó Command objektumoknál • cmdPartner.TransAction = tranObj • tranObj.IsolationLevel = IsolationLevel.Serializable
Tranzakció metódusai • tranObj.Commit() • tranObj.Save() • tranObj.Rollback() Internetes alkalmazásfejlesztés
139
Dataset Memóriában tárolt relációs adathalmaz Adatbázis kapcsolat nélkül működik Alaposztályok – – – – – – –
System.Data.DataSet System.Data.DataTable System.Data.DataColumn System.Data.Constraint System.Data.DatRelation System.Data.DataRow System.Data.DataView
Internetes alkalmazásfejlesztés
140
A DataSet osztály objektummodellje
Internetes alkalmazásfejlesztés
141
DataSet létrehozása és feltöltése 1. 2. 3. 4.
Programozott módon A Visual Studio .NET grafikus eszközeivel XML segítségével DataAdapter használatával
Internetes alkalmazásfejlesztés
142
DataSet programozott létrehozása Új DataSet objektum létrehozása – Dim dsSzamla As New DataSet("Szla")
Új DataTable objektum létrehozása és hozzákapcsolása a DataSet objektumhoz – Dim dtPartner As New DataTable = dsSzamla.Tables.Add("Partner") • Ha nem adunk meg táblanevet, akkor "Table0,1,2" nevet ad
Új DataColumn objektum hozzáadása a táblához – Dim colPartAzon As New DataColumn = dtPartner.Columns.Add("PartAzon", GetType(System.Int32)) Internetes alkalmazásfejlesztés
143
DataTable tulajdonságok Columns • A tábla oszlopainak kollekciója (DataColumnCollection)
Constraints • A tábla Constrainst kollekciója (ConstraintCollection) • ForeignKeyConstraint vagy UniqueKeyConstraint osztály
PrimaryKey • DataColumn() tömbként kell megadni • dtPartner.PrimaryKey=New DataColumn() _ {dtPartner.Column("PartAzon")}
Rows • Az adatsorok kollekciója Internetes alkalmazásfejlesztés
144
DataColumn tulajdonságok AllowDbNull • NULL constraints alkalmazása
Unique • UNIQUE constraints alkalmazása
AutoIncrement • colPartAzon.AutoIncrement = True colPartAzon.AutoIncrementSeed = 1000 'Innen indul colPartAzon.AutoIncrementStep = 1 ' Egyesével megy • SqlTypes.SqlGuid alkalmazása biztonságosabb, ha adatbázishoz nem kapcsolt környezetet használunk
Expression • Számított kifejezés használata Internetes alkalmazásfejlesztés
145
DataRelation objektum Két DataTable összekapcsolása DataColumn objektumok mentén • Rel1 = dsSzamla.Relations.Add("FK_Szamla_Partner", _ dtPartner.Columns("PartAzon"), _ dtSzamla.Columns("PartAzon"),True) • "True" jelentése: constraint-ek felépítését kérjük
A kapcsolt táblák elősegítik a navigálást • DataRow.GetChildRows metódus pl. az adott partnerhez tartozó számlasorokat adja vissza DataRow() tömbként
Törlési szabály beállítása • Rel1.DeleteRule = Rule.Cascade | Rule.SetNull | Rule.SetDefault | Rule.None Internetes alkalmazásfejlesztés
146
DataException események ConstraintException • Kísérlet egy éles constraint megsértésére
DuplicateNameException • Valamelyik Add metódus duplikált elemet hozna létre
InvalidConstraintException • Rossz reláció létrehozása vagy elérése
NoNullAllowedException • Egy AllowDbNull=False mezőben NULL-t akarunk írni
Internetes alkalmazásfejlesztés
147
Új sorok beillesztése a táblába DataRow objektum létrehozása • drPartner = dtPartner.NewRow()
DataRow objektum feltöltése adatokkal • drPartner("PartNev") = "Kakukk Kft." drPartner("PartVaros") = "Budapest" …. vagy • drPartner.ItemArray = new Object() {"Kakukk Kft.","Bp"…}
DataRow hozzáadása a DataTable objektumhoz • dtPartner.Rows.Add(drPartner)
Internetes alkalmazásfejlesztés
148
Adott sor megkeresése a táblában A DataTable.Rows kollekció segítségével • DataRowCollection típusú objektumot ad vissza
Item tulajdonság • dtPartner.Rows(3) a negyedik sort adja vissza
Count tulajdonság a sorok számát adja A Find metódus az elsődleges kulcs alapján keres • Dim Kulcs As Object Dim Sor As DataRow Kulcs = 214 Sor = dtPartner.Find(Kulcs) If Sor Is Nothing Then ' Nincs meg a keresett rekord Internetes alkalmazásfejlesztés
149
Meglévő sorok módosítása a táblában DataRow.BeginEdit metódussal kezdődik • Kikapcsolja a constraint események kezelését
DataRow.EndEdit vagy .CancelEdit metódussal zárjuk le a módosítást • Visszakapcsolja az eseménykezelést
Mintapélda: • ' Behozzuk a keresett sort, például: drPartner = dtPartner.Rows(7) drPartner.BeginEdit() drPartner("PartNev") = "Teszt Kft." drPartner.EndEdit() Internetes alkalmazásfejlesztés
150
Sorok törlése a táblából Fizikai törlés • dtPartner.Rows.RemoveAt(5) 'Törli a 6. sort • drPartner = dtPartner.Rows(5) dtPartner.Rows.Remove(drPartner) ' Ez is törli a 6. sort
Logikai törlés • drPartner.Delete • A drPartner.RowState értékét RowState.Deleted-re állítja
Internetes alkalmazásfejlesztés
151
Adatellenőrzés menete DataTable események • • • • • •
ColumnChanging (oszlop módosítása előtt) ColumnChanged (oszlop módosítását követően) RowChanging (minden oszlop módosítását követően) RowChanged (minden RowChanging után) RowDeleting (akkor, amikor törlésre jelölünk egy sort) RowDeleted (a sor törlését követően)
BeginEdit, EndEdit esetén • Csak egyszer lép fel a RowChanging és a RowChanged
Az események kezeléséhez • WithEvents opcióval kell deklarálni a DataTable-t • Throw-val lehet megakadályozni a módosítást Internetes alkalmazásfejlesztés
152
RowState és RowVersion DataRow.RowState lehetséges értékei: • • • • •
Deleted = a sort törölték DataRow.Delete-tel Modified = módosították, de AcceptChanges még nem volt Added = új sort vettek fel, de AcceptChanges még nem volt Unchanged = a legutolsó AcceptChanges óta nem módosult Detached = a DataRow nincs DataTable-hez kapcsolva
DataRow.RowVersion lehetséges értékei: • • • •
Current = az éppen aktuális értékek Default = az alapértelmezett értékek Original = az eredeti (módosítás előtti) értékek Proposed = módosítás közbeni (még nem elfogadott) értékek
DataRow("PartAzon",DataRowVersion.Original) • DataRow.HasVersion-nel lekérdezhető, hogy van-e olyan verzió Internetes alkalmazásfejlesztés
153
A módosítások véglegesítése AcceptChanges metódus • • • • •
DataRow, DataTable vagy DataSet szinten is kiadható Az "Original" értékek felveszik a "Current" értékeket A RowState értéke Unchanged lesz A RowError információk törlődnek A DataTable.HasErrors értéke false lesz
RejectChanges metódus
Internetes alkalmazásfejlesztés
154
DataView objektum Az SQL View szerepét tölti be DataSet-nél, DE!: • A DataView nem tekinthető DataTable-nek • Csak egy DataTable-re alapulhat (join-ok nem lehetnek) • Nem hagyhatók ki oszlopok az eredményből
Tipikusan rendezésre és szűrésre alkalmas • Dim dv As New DataView(dsSzamla.Tables("Partner")) dv.Sort = "PartNev" dv.Filter = "Irszam = '5600'"
A felhasználói interfészen használjuk • Így pl. több vezérlőelemet is hozzákapcsolhatunk ugyanahhoz a DataTable objektumhoz.
DataTable.DefaultView használata Internetes alkalmazásfejlesztés
155
DataAdapter objektum Kétféle formája van: – SqlDataAdapter – OleDbDataAdapter
Hídnak tekinthető az adatbázis és a DataSet egy adott DataTable objektuma között – Fill metódus tölti fel a DataTable-t az adatbázisból – Update metódus viszi vissza a módosításokat a DataTable-ből az adatbázisba
Mire alkalmas, és mire nem – Jó: Tábla másolata egy közbenső rétegben – Rossz: Kereső funkció eredménye egy Web site-on Internetes alkalmazásfejlesztés
156
DataAdapter létrehozása Két módszer kínálkozik • Data Adapter Configuration Wizard használata • Saját kód készítése
DataAdapter felépítése – egyelőre csak olvasásra • Dim daPartner As SqlDataAdapter Dim cnSzamla As SqlConnection("connection string adatok") Dim cmdPartner As New SqlCommand( _ "SELECT * FROM Partner",cnSzamla) daPartner.SelectCommand = cmdPartner
DataSet feltöltése DataAdapter-rel • intSorok = daPartner.Fill(dsSzamla | dtPartner | dsSzamla, "Partner") Internetes alkalmazásfejlesztés
157
Módosítások visszaírása az adatbázisba DataAdapter.Update(Para1) metódus meghívása • A Para1 lehet DataSet, DataTable vagy DataRow() tömb
A megfelelő SQL parancsok végrehajtása – InsertCommand – UpdateCommand – DeleteCommand
A kapcsolatot a DataTable-vel a megfelelő SQLParameter objektumok hozzák létre
Internetes alkalmazásfejlesztés
158
Mintapélda módosításra Dim cmdModos As New SqlCommand("UPDATE Partner SET" & _ "PartAzon=@ID, PartNev=@Nev WHERE PartAzon=@EredID", _ cnSzamla) cmdModos.Parameters.Add(New SqlParameter("@ID", _ SqlDbType.Int32, 4, ParameterDirection.Input, False, _ 0, 0, "PartAzon", DataRowVersion.Current, Nothing)) cmdModos.Parameters.Add(New SqlParameter("@Nev", _ SqlDbType.Char, 30, ParameterDirection.Input, False, _ 0, 0, "PartNev", DataRowVersion.Current, Nothing)) cmdModos.Parameters.Add(New SqlParameter("@EredID", _ SqlDbType.Int32, 4, ParameterDirection.Input, False, _ 0, 0, "PartAzon", DataRowVersion.Original, Nothing))
Internetes alkalmazásfejlesztés
159
DataSet módosítások kezelése DataTable.GetChanges metódus • Előállít egy újabb DataTable-t, amibe csak az adott módosítások (pl. csak a törlések) kerülnek • DataSet.GetChanges is hasonlóan működik
DataTable.Select metódus • Szűrő, rendezés és RowState alapján kijelölt sorokat egy DataRow() tömbbe rakja • Nem másolás(!), hanem pointerek kialakítása
DataSet.Merge metódus • Az adott DataSet-hez hozzárakja egy másik DataSet vagy DataTable tartalmát Internetes alkalmazásfejlesztés
160
Konfliktusok kezelése Az optimista zárolás miatt konfliktusok keletkezhetnek Konfliktusok detektálása Konfliktusok feloldása 1. 2. 3. 4.
"Az utolsó győz" elv alapján A konfliktust okozó adatok a DataSet-ben maradnak A helyi DataSet-ben visszaállunk az eredeti adatra A helyi DataSet-be betöltjük a legutolsó adatokat
Internetes alkalmazásfejlesztés
161
DataSet és az XML XSD Schema – Az XML dokumentum struktúráját írja le – Az adatbázis szerkezeti leírásához hasonló • Adattáblák és a táblák közötti kapcsolatok • Adatmezők neve és adattípusa • Kényszerek (pl. elsődleges kulcs, egyedi kulcs, stb.)
Erős típusú DataSet – Sémainformációval rendelkező DataSet – A séma segíti az adatellenőrzést – Hatékonyabb az adatimport és az adatexport Internetes alkalmazásfejlesztés
162
XSD séma alapelemei: element <xs:element name="PartAz" type="xs:integer" /> – Egyszerű vagy komplex adat leírására – Kisbetű-nagybetű megadására érzékeny – Primitív XML adattípusok • string, Boolean, float, double, decimal, dateTime, time, date, anyURI
– Származtatott XML adattípusok • integer, long, short, int, byte, positiveInteger, unsignedLong
– Példa adatfeltöltésre • <PartAz>2547 ' Jó példa • <PartAz>XC35 ' Rossz példa Internetes alkalmazásfejlesztés
163
XSD séma alapelemei: attribute <xs:attribute name="PartPri" type="xs:number"/> – Csak egyszerű adat leírására jó – Alapértelmezésbeli érték megadható – Az attribútumok sorrendje tetszőleges, míg az elemek sorrendje a séma szerinti kell hogy legyen
Internetes alkalmazásfejlesztés
164
XSD séma alapelemei: simpleType Létrehozás: – <xs:simpleType name="ketJegyuSzam"> <xs:restriction base="xs:positiveInteger"> <xs:maxInclusive value="99" />
Felhasználás: – <xs:element name="Db" type="ketJegyuSzam" />
Tipikus facet elemek: – length, maxLength, minLength, maxExclusive, pattern Internetes alkalmazásfejlesztés
165
XSD séma alapelemei: complexType Létrehozás: – <xs:complexType name="Cim"> <xs:sequence> <xs:element name="Varos" type="xs:string" /> <xs:element name="UtcaHsz" type="xs:string" /> <xs:element name="Irsz" type="xs:string" />
Felhasználás: – <xs:element name="SzlaCim" type="Cim" />
A komplex típusok egymásba ágyazhatók Internetes alkalmazásfejlesztés
166
XSD séma alapelemei: group Példa: • <xs:group name="RendFej"> <xs:sequence> <xs:element name="VevoNev" type="xs:string" /> <xs:element name="RendSzam" type="xs:number" /> <xs:element name="RendDat" type="xs:date" />
Csoportok típusai: • sequence • choice • all
kötött sorrendben minden elem kötelező a felsoroltak közül csak az egyik kell nulla vagy több elem bármilyen sorrendben Internetes alkalmazásfejlesztés
167
XSD séma adatkiegészítése A névtartományt meg kell adni: • xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
Elsődleges kulcs megadása • <xs:key name="pkPartner" msdata:PrimaryKey="true"> <xs:selector xpath=".//Partner"/> <xs:field xpath="PartAzon"/>
Egyedi kulcs megadása • <xs:unique name="Adoszam"> ….stb.
Idegen kulcs megadása • <xs:keyref name="fkRendPart" refer="pkPartner"> … stb. Internetes alkalmazásfejlesztés
168
XSD betöltése egy DataSet-be Mintapélda: • DS1 = new DataSet() DS1.ReadXmlSchema("C:\Proba\Kakukk.Xsd")
Közvetlen filenév helyett használható: – StreamReader, TextReader, XmlReader objektum is
Metaadatok lekérdezhetők ezután: • Ds.Tables tulajdonság, Ds.Relations tulajdonság • Tables(index vagy név).Columns(index).ColumnName • Tables(index vagy név).Columns(index).DataType
Az InferSchema metódussal XML-ből is felépíti az adatszerkezetet Internetes alkalmazásfejlesztés
169
XML adatok betöltése a DataSet-be Ds.ReadXml(XmlObjektum,XmlReadMode) – Az XmlObjektum filenév, stream, text vagy Xmlreader – Az XmlReadMode lehetséges értékei: • • • • •
ReadSchema IgnoreSchema InferSchema DiffGram Fragment
Az inline séma és az adatok együttesen Inline séma nélkül csak az adatok Az adatok alapján épül fel a séma is Berakja a DiffGram-ot a DataSet-be SQLServer-ből generált XML-nél
A sémának nem megfelelő adatok kimaradnak
Internetes alkalmazásfejlesztés
170
XML írása DataSet-ből Ds.WriteXmlSchema(XmlObjektum) • Csak a sémainformációt írja ki egy file-ba vagy reader-re
Ds.GetXmlSchema() • String-ként írja ki a sémainformációt
Ds.WriteXml(XmlObjektum,XmlWriteMode) • IgnoreSchema • WriteSchema • DiffGram
Csak az adatokat írja ki az XML-be Inline sémát és az adatokat írja ki Diffgram-ot ír eredeti és aktuális adattal
Internetes alkalmazásfejlesztés
171
DiffGram Csak a DataSet változásait írja ki • Disconnected DataSet esetén pont ez kell
DiffGram névtér: • xmlns:diffgr="urn:schemas-microsoft-com:xml:diffgram-v1"
Három részre osztható: • Aktuális adat a sémának megfelelő elemekkel, majd ezután •
elemben az eredeti tartalom • elemben a fellépett hibák
DiffGram attribútumok (annotációk) • diffgr:hasChanges="modified | inserted | descent" • diffgr:id = sorok egyedi azonosítása az összekapcsolás miatt Internetes alkalmazásfejlesztés
172
Adatok megjelenítése a Web űrlapon
Adatok vezérlőelemhez kapcsolása Szintaktikai alakja 1. runat="server"> 2. sima szöveg <%# Adatkötési kifejezés %>
A DataBind() metódus hozza létre a kapcsolatot – Page.DataBind() •
Az adott lap összes adatkötését élesíti
– ctlValami.DataBind() •
Csak az adott vezérlőelem adatkötéseire vonatkozik
Internetes alkalmazásfejlesztés
174
Adatkötési kifejezés lehetséges formái Template vezérlőelemeknél (GridView, DataList, Repeater) – Container.DataItem("mezőnév") • Csak akkor egyszerű, ha a mező string-et ad, egyébként a String.Format segítségével át kell alakítani
– DataBinder.Eval(Container.DataItem,"mezőnév", "formátum") • Futáskori kötéssel működik
Szerver vezérlőelemek között – Az adott vezérlőelem valamelyik tulajdonsága • runat="server"> Internetes alkalmazásfejlesztés
175
Egyirányú/kétirányú adatkötés Egyirányú (1.x-ben) <%# DataBinder.Eval(Container.DataItem, fieldName, formatString) %>
Egy és kétirányú (2.0-tól) <%# Eval(fieldName, formatString) %> <%# Bind(fieldName, formatString) %>
Internetes alkalmazásfejlesztés
176
Adatkötési események • • • • • •
Selecting Selected Inserting Inserted Updating Updated
• • • • • •
Deleting Deleted Filtering Databinding Databound …
Internetes alkalmazásfejlesztés
177
Adatelérési komponensek DataSource controls – adatforrások – Fizikai adatforrás eltakarása
Data-bound controls – vezérlők – Leggyakoribb megjelenítési fajtákra komponensek
DataBinding – megfeleltetés – Adatforrások vezérlőkkel történő összerendelése
Konfigurációkezelés
Internetes alkalmazásfejlesztés
178
Adatforrások (DataSource controls) VS2005 – – – – –
SqlDataSource ObjectDataSource XmlDataSource AccessDataSource SiteMapDatasource
VS2008 – LinqDataSource – EntityDataSource Internetes alkalmazásfejlesztés
179
Vezérlők (Data-bound controls) VS2002-2003 – DataList – Repeater
VS2005 – – – – –
GridView (DataGrid helyett) DetailsView FormView TreeView Menu
VS2008 – ListView
Internetes alkalmazásfejlesztés
180
Konfiguráció kezelés
ConnectionString="<%$ connectionStrings:pubs %>" SelectCommand="select au_id from authors" runat="server"/> Dim connectionString as string = ConfigurationSettings.ConnectionStrings("pubs”) Internetes alkalmazásfejlesztés
181
GridView vezérlőelem Táblázatos adat megjelenítése • Rendezhető, editálható elemek, de új sort nem lehet vele felvenni • Bármelyik Collection osztály, ami IEnumerable • System.Data.DataView, System.Collections.ArrayList, stb.
A vezérlőelem létrehozása •
Hozzákapcsolás egy adatforráshoz • dgPartner.DataSource=ds.Tables("Partner").DefaultView dgPartner.DataBind()
Internetes alkalmazásfejlesztés
182
GridView szerkezete Sor=GridViewRow objektum – Van Cells kollekciója, melynek elemei DataControlFieldCell objektumok
Oszlop=DataControlField objektum – BoundField, TemplateField, ButtonField, CommandField, HyperlinkField, ImageField, CheckboxField – A konkrét oszlopok a DataControlField-ből örökített osztályok, melyben felülírják az InitializeCell metódust
Megjelenítés menete – A grdX.InitializeRow sorban meghívja az egyes oszlopok InitializeCell metódusait, és így jön létre egy új sor Internetes alkalmazásfejlesztés
183
Adathoz kapcsolható tulajdonságok BoundField esetén • DataField a megjelenített és editálható mező neve
ButtonField esetén • DataTextField adja a Text-hez kapcsolt mező nevét • DataTextFormatString írja elő a megjelenítési formátumot
HyperLinkField esetén • DataTextField adja a Text-hez kapcsolt mező nevét • DataTextFormatString írja elő a megjelenítési formátumot • DataNavigateUrlField adja az URL-t hordozó mező nevét, ami a NavigateUrl tulajdonságba kerül • DataNavigateUrlFormatString írja elő a megjelenítési formátumot Internetes alkalmazásfejlesztés
184
Template elemek használata TableRow-hoz vagy TableCell-hez rendelhető Hierarchikus sorrend – – – –
RowStyle AlternatingRowStyle EditItemStyle ColumnStyle
Egyéb stíluselemek – HeaderStyle, FooterStyle – PagerStyle
RowDataBound eseménynél lehet programozottan stílust állítani Internetes alkalmazásfejlesztés
185
GridView példa Internetes alkalmazásfejlesztés
186
Repeater vezérlőelem A megadott template alapján ismétli az adatokat Ez az egyetlen olyan elem, ahol a HTML tagok szétbonthatók, például: • A nyitó a -be kerül • A az -be • A záró
pedig a -be
Adathordozó template elemek: • ItemTemplate és AlternatingItemTemplate • Az ItemTemplate az egyetlen kötelező elem
Nem adathordozó template elemek: • HeaderTemplate, FooterTemplate, SeparatorTemplate Internetes alkalmazásfejlesztés
187
Repeater példa Partnerek neve és címe: <%# DataBinder.Eval(Container.DataItem, "PartNev") %> (<%# DataBinder.Eval(Container.DataItem, "PartCim") %>) <SeparatorTemplate>, Tabla1.DataSource = ds ' Ez egy feltöltött DataSet Tabla1.DataMember = "Partner" Tabla1.DataBind() Internetes alkalmazásfejlesztés
188
DataList vezérlőelem A Repeater-hez hasonló template-ek • EditItemTemplate és SelectedItemTemplate is létezik • Ennek megfelelően editálható (a DataGrid-hez hasonlóan) • Az ItemTemplate az egyetlen kötelező elem
A DataGrid-hez hasonló stílusok • Minden template-hez stílus is tartozhat, pl. ItemStyle
Tulajdonságok – RepeatLayout = Table vagy Flow – RepeatColumns = Hány oszlopba rendezze az adatokat – RepeatDirection = Horizontal vagy Vertical Internetes alkalmazásfejlesztés
189
DetailsView vezérlőelem Egy adatrekord kezelésére – Megjelenítés,Feltöltés,Módosítás – GridView komplementere, ez is lesz – Jól kiegészítik egymást, itt is van AllowPaging
Internetes alkalmazásfejlesztés
190
FormView vezérlőelem DetailsView-hoz hasonló – Mi magunk adjuk meg az egyes nézetek képeit – Űrlap alapú adatkezelés, nagy markup lesz belőle – Megjelenítés, Feltöltés, Módosítás
Internetes alkalmazásfejlesztés
191
TreeView és Menu vezérlőelem TreeView:Hierarchikus adatok megjelenítésére – TreeNode objektumokból áll, melyek Text-je jelenik meg, és Value-ja kapcsolódik az adatforráshoz – Selection vagy Navigation módban használható • Ha a NavigateURL meg van adva, akkor navigációs a mód
– Elemek kinyithatóak és becsukhatóak – XML adatforrás jó párja •
Menu: Ez is hierarchikus adatokhoz való (főleg menü) – Statikus: … – Dinamikus: XMLDataSource vagy SiteMapDataSource • Xpath=„/root/*” révén a gyökérelem kihagyható
– Kinyíló menüpontok – Navigálás Internetes alkalmazásfejlesztés
192
Mesteroldalak, témák, bőrök
Mesteroldal (Master Page)
Internetes alkalmazásfejlesztés
194
Mesteroldal működése Mester oldal tartalmazza a közös tartalmat és tartalom helyőrzőket () Tartalom oldal hivatkozik a mesterre és kitölti a helyőrzőket () Site.master
ContentPlaceHolder
default.aspx
http://.../default.aspx
Content
Internetes alkalmazásfejlesztés
195
Mesteroldal definiálása <%@ Master %>
<span style="font-size: 36pt; color: white"> Mintapélda címsora |
Internetes alkalmazásfejlesztés
196
Mesteroldal alkalmazása Egy adott ASPX lapra <%@ Page MasterPageFile="~/Site.master" %>
Ez a szöveg jelenik meg a mester oldalon definiált "Mester" nevű kontrolban
Egy egész webhelyre (web.config-ban) <system.web>
<pages masterPageFile="~/Site.master" /> …
Internetes alkalmazásfejlesztés
197
Default tartalom Tartalom helyőrzőknek lehet saját tartalmuk (alapértelmezett tartalom) Ez csak akkor jelenik meg, ha a tartalom oldal nem tölti ezt ki <%@ Master %> ... Ez lesz az alapértelmezett tartalom. De csak akkor jelenik meg, ha a Content lapon nincs megadva semmi sem.
Internetes alkalmazásfejlesztés
198
Mesteroldal mesteroldala Mesteroldalak egymásba ágyazhatók • Ha egy mesteroldalnak van mesteroldala, akkor az alsóbb mesteroldal • Tölti ki a felsőbb helyőrzőit • De neki is lehetnek saját helyőrzői
VS2005-ben csak forrás nézetben (nincs design támogatás) <%@ Master MasterPageFile="~/Level0.Master" %>
...
Internetes alkalmazásfejlesztés
199
Mesteroldal elérése kódból Page.MasterPageFile – Master beállítása futási időben – Pre_Init fázisban vagy hamarabb
Page.Master – System.Web.UI.Page új tulajdonsága – Referencia a mester oldalra • NULL ha nincs mesteroldal • A mester vezérlőinek elérése • A mester public és protected metódusainak és tulajdonságainak elérése
– A mester és a tartalom oldalak kód szintű összekapcsolása
Internetes alkalmazásfejlesztés
200
Témák és bőrök Webhely stílusinformációinak csoportokba gyűjtése Bőr = vezérlők vizuális jellemzője – .skin fájlokban tárolva – Alapértelmezett és névvel ellátott bőrök • SkinID nélküli, illetve SkinID-val ellátott
Téma = bőrök halmaza, gyűjteménye – Themes alkönyvtárban – Globális és lokális témák Internetes alkalmazásfejlesztés
201
Téma alkalmazása Egy alkalmazás minden lapjára <system.web> <pages theme="BasicBlue" />
Egy lap minden vezérlőjére <%@ Page Theme="BasicBlue">
Kódból void Page_PreInit (Object sender, EventArgs e) {
Page.Theme = "BasicBlue"; }
Internetes alkalmazásfejlesztés
202
Felhasználói vezérlőelemek és komponensek készítése
User Control Felhasználói szerver vezérlőelem (.ascx file) • Az Include helyett használható • Tipikus alkalmazás: fejléc, navigációs gombsor • , és