Megosztás a következőn keresztül:


Meglévő bináris adatok frissítése és törlése (C#)

által Scott Mitchell

PDF letöltése

A korábbi oktatóanyagokban láthattuk, hogyan teszi egyszerűvé a GridView vezérlő a szöveges adatok szerkesztését és törlését. Ebben az oktatóanyagban azt látja, hogy a GridView-vezérlő hogyan teszi lehetővé a bináris adatok szerkesztését és törlését, függetlenül attól, hogy a bináris adatokat az adatbázisban menti vagy a fájlrendszerben tárolja.

Bevezetés

Az elmúlt három oktatóanyagban elég sok funkciót adtunk hozzá a bináris adatok kezeléséhez. Először hozzáadtunk egy oszlopot BrochurePath a Categories táblához, és ennek megfelelően frissítettük az architektúrát. Adatelérési réteg és üzleti logikai réteg metódusokat is hozzáadtunk a Categories tábla meglévő Picture oszlopához, amely egy képfájl bináris tartalmait tartalmazza. Olyan weblapokat hoztunk létre, amelyek a bináris adatokat egy GridView-ban egy letöltési hivatkozással jelenítik meg a brosúrához, a kategória képe pedig egy <img> elemben jelenik meg, és hozzáadtunk egy DetailsView-t, amellyel a felhasználók új kategóriát adhatnak hozzá, és feltölthetik a brosúrát és a képadatokat.

Csak a meglévő kategóriák szerkesztésének és törlésének lehetősége marad meg, amelyet ebben az oktatóanyagban a GridView beépített szerkesztési és törlési funkcióival fogunk elvégezni. Kategória szerkesztésekor a felhasználó opcionálisan feltölthet egy új képet, vagy a kategória továbbra is használhatja a meglévőt. A brosúra esetében dönthetnek úgy, hogy a meglévő brosúrát használják, feltöltenek egy új brosúrát, vagy azt jelzik, hogy a kategória már nem rendelkezik brosúrával. Lássunk hozzá!

1. lépés: Az adatelérési réteg frissítése

A DAL automatikusan létrehozta a Insert, Update és Delete metódusokat, de ezek a metódusok a CategoriesTableAdapter fő lekérdezése alapján készültek, amely nem tartalmazza a Picture oszlopot. Ezért a Insert és Update metódusok nem tartalmaznak paramétereket a kategória képének bináris adatainak megadásához. Az előző oktatóanyaghoz hasonlóan létre kell hoznunk egy új TableAdapter metódust a tábla frissítéséhez bináris Categories adatok megadásakor.

Nyissa meg a Type-adatállományt, és a Tervezőn kattintson a jobb gombbal az CategoriesTableAdapter s fejlécre, majd válassza ki a Helyi menü Lekérdezés hozzáadása elemét a TableAdapter lekérdezéskonfigurációs varázsló elindításához. Ez a varázsló azzal kezdődik, hogy megkérdezi, hogyan férhet hozzá a TableAdapter-lekérdezés az adatbázishoz. Válassza az SQL-utasítások használata lehetőséget, majd kattintson a Tovább gombra. A következő lépés a létrehozandó lekérdezés típusát kéri. Mivel létrehozunk egy lekérdezést, amely új rekordot ad hozzá a táblához, válassza az UPDATE elemet, majd kattintson a Categories Tovább gombra.

Válassza az UPDATE (FRISSÍTÉS) lehetőséget

1. ábra: Válassza a FRISSÍTÉS lehetőséget (kattintson ide a teljes méretű kép megtekintéséhez)

Most meg kell adnunk az SQL-utasítást UPDATE . A varázsló automatikusan javasol egy UPDATE , a TableAdapter fő lekérdezésének megfelelő utasítást (amely frissíti a CategoryName, Descriptionés BrochurePath az értékeket). Módosítsa az utasítást úgy, hogy az Picture oszlop egy @Picture paraméterrel együtt szerepeljön, például:

UPDATE [Categories] SET 
    [CategoryName] = @CategoryName, 
    [Description] = @Description, 
    [BrochurePath] = @BrochurePath ,
    [Picture] = @Picture
WHERE (([CategoryID] = @Original_CategoryID))

A varázsló utolsó képernyője arra kéri, hogy nevezzük el az új TableAdapter metódust. Adja meg UpdateWithPicture , majd kattintson a Befejezés gombra.

Az Új TableAdapter metódus updateWithPicture elnevezése

2. ábra: Nevezze el az Új TableAdapter metódust UpdateWithPicture (kattintson ide a teljes méretű kép megtekintéséhez)

2. lépés: Az üzleti logikai réteg metódusainak hozzáadása

A DAL frissítése mellett a BLL-t is frissíteni kell, hogy a kategória frissítési és törlési módszerei is szerepeljenek. Ezek a módszerek lesznek meghívva a Prezentációs Rétegből.

Egy kategória törléséhez használhatjuk az CategoriesTableAdapter automatikusan létrehozott metódust Delete . Adja hozzá a következő metódust a CategoriesBLL osztályhoz:

[System.ComponentModel.DataObjectMethodAttribute
    (System.ComponentModel.DataObjectMethodType.Delete, true)]
public bool DeleteCategory(int categoryID)
{
    int rowsAffected = Adapter.Delete(categoryID);
    // Return true if precisely one row was deleted, otherwise false
    return rowsAffected == 1;
}

Ebben az oktatóanyagban hozzunk létre két metódust egy kategória frissítéséhez – az egyik a bináris képadatokra számít, és meghívja azt a UpdateWithPictureCategoriesTableAdapter metódust, amelyet most adtunk hozzá, és egy másikat, amely csak a CategoryName, Descriptionés BrochurePath az értékeket fogadja el, és az osztály automatikusan létrehozott CategoriesTableAdapter utasítását használjaUpdate. A két módszer használatának indoka, hogy bizonyos körülmények között előfordulhat, hogy a felhasználó frissíteni szeretné a kategória képét a többi mezővel együtt, ebben az esetben a felhasználónak fel kell töltenie az új képet. A feltöltött kép bináris adatai ezután felhasználhatók az UPDATE utasításban. Más esetekben előfordulhat, hogy a felhasználót csak a név és a leírás frissítése érdekli. De ha az UPDATE utasítás az oszlop bináris adatait Picture is várja, akkor ezt az információt is meg kell adnunk. Ehhez további utazásra lenne szükség az adatbázishoz a szerkesztett rekord képadatainak visszahozásához. Ezért két UPDATE módszert szeretnénk. Az üzleti logikai réteg határozza meg, hogy melyiket használja a kategória frissítésekor megadott képadatok alapján.

Ennek megkönnyítése érdekében adjon hozzá két metódust az CategoriesBLL osztályhoz, mindkettő neve UpdateCategory. Az elsőnek három string s-t, egy byte tömböt és egy bemeneti paramétert int kell elfogadnia; a másodikat, csak három string s-t és egy int. A string bemeneti paraméterek a kategória neve, leírása és brosúrafájl elérési útja, a byte tömb a kategória képének bináris tartalmára szolgál, és a int frissíteni kívánt rekordot azonosítja CategoryID . Figyelje meg, hogy ha az átadott byte tömb null, az első túlterhelés meghívja a másodikat.

[System.ComponentModel.DataObjectMethodAttribute
    (System.ComponentModel.DataObjectMethodType.Update, false)]
public bool UpdateCategory(string categoryName, string description, 
    string brochurePath, byte[] picture, int categoryID)
{
    // If no picture is specified, use other overload
    if (picture == null)
        return UpdateCategory(categoryName, description, brochurePath, categoryID);
    // Update picture, as well
    int rowsAffected = Adapter.UpdateWithPicture
        (categoryName, description, brochurePath, picture, categoryID);
    // Return true if precisely one row was updated, otherwise false
    return rowsAffected == 1;
}
[System.ComponentModel.DataObjectMethodAttribute
    (System.ComponentModel.DataObjectMethodType.Update, true)]
public bool UpdateCategory(string categoryName, string description, 
    string brochurePath, int categoryID)
{
    int rowsAffected = Adapter.Update
        (categoryName, description, brochurePath, categoryID);
    // Return true if precisely one row was updated, otherwise false
    return rowsAffected == 1;
}

3. lépés: A beszúrási és megtekintési funkciók átvezetése

Az előző oktatóanyagban létrehoztunk egy oldalt, amely UploadInDetailsView.aspx egy GridView összes kategóriáját listázta, és egy DetailsView-t adott meg, amellyel új kategóriákat vehet fel a rendszerbe. Ebben az oktatóanyagban kiterjesztjük a GridView-t a támogatás szerkesztésére és törlésére. Ahelyett, hogy továbbra is UploadInDetailsView.aspx dolgozzunk, inkább helyezzük el az oktatóanyag változtatásait a UpdatingAndDeleting.aspx oldalra ugyanabból a mappából, ~/BinaryData. Másolja és illessze be a deklaratív jelölést és a kódot UploadInDetailsView.aspx és UpdatingAndDeleting.aspx között.

Kezdje az oldal megnyitásával UploadInDetailsView.aspx . Másolja ki a <asp:Content> elem összes deklaratív szintaxisát úgy, ahogy az a 3. ábrán látható. Ezután nyissa meg a UpdatingAndDeleting.aspx elemet, és illessze be ezt a jelölést a <asp:Content> elembe. Hasonlóképpen másolja a kódot a UploadInDetailsView.aspx oldal kód mögötti osztályából a UpdatingAndDeleting.aspx osztályba.

A deklaratív jelölés másolása az UploadInDetailsView.aspx-ból

3. ábra: A deklaratív korrektúra másolása (UploadInDetailsView.aspxide kattintva megtekintheti a teljes méretű képet)

A deklaratív jelölés és kód másolása után látogasson el UpdatingAndDeleting.aspx. Ugyanazt a kimenetet kell látnia, és ugyanazt a felhasználói élményt kell tapasztalnia, mint az előző oktatóanyag UploadInDetailsView.aspx lapja.

4. lépés: Törlési támogatás hozzáadása az ObjectDataSource-hoz és a GridView-hoz

Ahogy az Adatok beszúrásának, frissítésének és törlésének áttekintésével kapcsolatos oktatóanyagban is tárgyaltuk, a GridView beépített törlési képességeket biztosít, és ezek a képességek egy jelölőnégyzet bejelölésével engedélyezhetők, ha a rács mögöttes adatforrása támogatja a törlést. Jelenleg a GridView objektumadatforrása (CategoriesDataSource) nem támogatja a törlést.

Ennek kijavításához kattintson az ObjectDataSource intelligens címkéjének Adatforrás konfigurálása beállítására a varázsló elindításához. Az első képernyőn látható, hogy az ObjectDataSource úgy van konfigurálva, hogy működjön az CategoriesBLL osztálysal. Nyomja le a Következőt. Jelenleg csak az ObjectDataSource és InsertMethodSelectMethod a tulajdonságok vannak megadva. A varázsló azonban automatikusan kitöltötte a legördülő listákat az UPDATE és a DELETE lapon a UpdateCategory metódusokkal.DeleteCategory Ennek az az oka, hogy az osztályban ezeket a CategoriesBLL metódusokat a DataObjectMethodAttribute frissítés és törlés alapértelmezett metódusaként jelöltük meg.

Egyelőre az UPDATE lap legördülő listáját állítsa (Nincs) értékre, de hagyja a DELETE lap legördülő lista beállítását DeleteCategory. A frissítési támogatás hozzáadásához visszatérünk a varázslóhoz a 6. lépésben.

Az ObjectDataSource konfigurálása a DeleteCategory metódus használatára

4. ábra: Az ObjectDataSource konfigurálása a DeleteCategory metódus használatára (kattintson ide a teljes méretű kép megtekintéséhez)

Megjegyzés:

A varázsló elvégzése után a Visual Studio megkérdezheti, hogy szeretné-e frissíteni a mezőket és kulcsokat, ami újragenerálja az adat webes vezérlőinek mezőit. Válassza a Nem lehetőséget, mert az Igen választás felülírja az esetlegesen végrehajtott mezők testreszabását.

Az ObjectDataSource mostantól tartalmaz egy értéket a tulajdonságához DeleteMethod, és DeleteParameter értéket is. Ne feledje, hogy amikor a varázslót használja a metódusok megadására, a Visual Studio az ObjectDataSource tulajdonságot a következőre OldValuesParameterFormatStringállítjaoriginal_{0}, ami problémákat okoz a frissítési és törlési metódushívásokkal kapcsolatban. Ezért törölje teljesen a tulajdonságot, vagy állítsa vissza az alapértelmezett értékre. {0} Ha frissítenie kell a memóriát ezen az ObjectDataSource tulajdonságon, tekintse meg az adatok beszúrásának, frissítésének és törlésének áttekintését ismertető oktatóanyagot .

A varázsló befejezése és a OldValuesParameterFormatStringjavítás után az ObjectDataSource deklaratív korrektúrája az alábbihoz hasonlóan fog kinézni:

<asp:ObjectDataSource ID="CategoriesDataSource" runat="server" 
    OldValuesParameterFormatString="{0}" SelectMethod="GetCategories" 
    TypeName="CategoriesBLL" InsertMethod="InsertWithPicture" 
    DeleteMethod="DeleteCategory">
    <InsertParameters>
        <asp:Parameter Name="categoryName" Type="String" />
        <asp:Parameter Name="description" Type="String" />
        <asp:Parameter Name="brochurePath" Type="String" />
        <asp:Parameter Name="picture" Type="Object" />
    </InsertParameters>
    <DeleteParameters>
        <asp:Parameter Name="categoryID" Type="Int32" />
    </DeleteParameters>
</asp:ObjectDataSource>

Az ObjectDataSource konfigurálása után adjon hozzá törlési képességeket a GridView-hoz a GridView intelligens címkéjének Törlés engedélyezése jelölőnégyzetének bejelölésével. Ezzel hozzáad egy CommandFieldet ahhoz a GridView-hoz, amelynek ShowDeleteButton a tulajdonsága a következőre truevan állítva.

A GridView-ban történő törlés támogatásának engedélyezése

5. ábra: A GridView-ban történő törlés támogatásának engedélyezése (kattintson ide a teljes méretű kép megtekintéséhez)

Szánjon egy kis időt a törlési funkció kipróbálására. Az Products táblázat s CategoryID és a Categories táblázat s CategoryID között van egy idegen kulcs, ezért, ha megpróbálná törölni az első nyolc kategória bármelyikét, egy idegen kulcs megszorítás sértési kivételt kap. A funkció kipróbálásához adjon hozzá egy új kategóriát, amely brosúrát és képet is biztosít. A 6. ábrán látható tesztkategória egy elnevezett Test.pdf tesztfüzetfájlt és egy tesztképet tartalmaz. A 7. ábrán a GridView látható a tesztkategória hozzáadása után.

Tesztkategória hozzáadása brosúrával és képpel

6. ábra: Tesztkategória hozzáadása brosúrával és képpel (kattintson ide a teljes méretű kép megtekintéséhez)

A tesztkategória beszúrása után megjelenik a GridView-ban

7. ábra: A tesztkategória beszúrása után megjelenik a GridView-ban (kattintson ide a teljes méretű kép megtekintéséhez)

A Visual Studióban frissítse a Megoldáskezelőt. Most egy új fájlnak kell megjelennie a ~/Brochures mappában ( Test.pdf lásd a 8. ábrát).

Ezután kattintson a Törlés hivatkozásra a Tesztkategória sorban, ami miatt az oldal újratöltődik, és az CategoriesBLL osztály DeleteCategory metódusa végrehajtódik. Ez meghívja a DAL metódust Delete , így a megfelelő DELETE utasítást elküldi az adatbázisnak. Az adatok ezután visszapattannak a GridView-ba, és a korrektúra vissza lesz küldve az ügyfélnek, és a tesztkategória már nem jelenik meg.

Bár a törlési munkafolyamat sikeresen eltávolította a Tesztkategória rekordot a Categories táblából, nem távolítja el a brosúrafájlt a webkiszolgáló fájlrendszeréből. Frissítse a Megoldáskezelőt, és látni fogja, hogy Test.pdf még mindig a ~/Brochures mappában van.

A Test.pdf fájl nem lett törölve a webkiszolgáló fájlrendszeréből

8. ábra: A Test.pdf fájlt nem törölték a webkiszolgáló fájlrendszeréből

5. lépés: A törölt kategória brosúrafájljának eltávolítása

Az adatbázison kívüli bináris adatok tárolásának egyik hátránya, hogy a társított adatbázisrekord törlésekor további lépéseket kell tenni a fájlok törléséhez. A GridView és az ObjectDataSource olyan eseményeket biztosít, amelyek a törlési parancs végrehajtása előtt és után is aktiválódnak. Valójában eseménykezelőket kell létrehoznunk a művelet előtti és a utáni eseményekhez is. Categories A rekord törlése előtt meg kell határoznunk a PDF-fájl elérési útját, de nem szeretnénk törölni a PDF-fájlt a kategória törlése előtt, ha valamilyen kivétel van, és a kategória nem törlődik.

A GridView-eseményRowDeleting az ObjectDataSource törlési parancsának meghívása előtt aktiválódik, az esemény pedig RowDeleted utána aktiválódik. Hozzon létre eseménykezelőket ehhez a két eseményhez a következő kóddal:

// A page variable to "remember" the deleted category's BrochurePath value 
string deletedCategorysPdfPath = null;
protected void Categories_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    // Determine the PDF path for the category being deleted...
    int categoryID = Convert.ToInt32(e.Keys["CategoryID"]);
    CategoriesBLL categoryAPI = new CategoriesBLL();
    Northwind.CategoriesDataTable categories = 
        categoryAPI.GetCategoryByCategoryID(categoryID);
    Northwind.CategoriesRow category = categories[0];
    if (category.IsBrochurePathNull())
        deletedCategorysPdfPath = null;
    else
        deletedCategorysPdfPath = category.BrochurePath;
}
protected void Categories_RowDeleted(object sender, GridViewDeletedEventArgs e)
{
    // Delete the brochure file if there were no problems deleting the record
    if (e.Exception == null)
    {
        // Is there a file to delete?
        if (deletedCategorysPdfPath != null)
        {
            System.IO.File.Delete(Server.MapPath(deletedCategorysPdfPath));
        }
    }
}

RowDeleting Az eseménykezelőben a CategoryID törölt sor a GridView DataKeys gyűjteményéből lesz megragadva, amely ebben az eseménykezelőben a e.Keys gyűjteményen keresztül érhető el. Ezután a rendszer meghívja az CategoriesBLL s GetCategoryByCategoryID(categoryID) osztályt a törölt rekordra vonatkozó információk visszaadásához. Ha a visszaadott CategoriesDataRow objektum nem NULL``BrochurePath értékű, akkor a rendszer eltárolja az oldalváltozónban deletedCategorysPdfPath, hogy a fájl az RowDeleted eseménykezelőben törölhető legyen.

Megjegyzés:

Ahelyett, hogy a BrochurePath részleteit a Categories rekord törlésére irányuló RowDeleting eseménykezelőben keresnénk meg, alternatív megoldásként a BrochurePath hozzáadható lett volna a GridView DataKeyNames tulajdonságához, és a rekord értéke a e.Keys gyűjteményen keresztül lett volna elérhető. Ezzel némileg növelné a GridView megtekintési állapotának méretét, de csökkentené a szükséges kód mennyiségét, és megtakarítana egy adatbázis lekérdezést.

Az ObjectDataSource mögöttes törlési parancsának meghívása után a GridView eseménykezelője RowDeleted aktiválódik. Ha nem volt kivétel az adatok törlésekor, és van egy érték, deletedCategorysPdfPathakkor a RENDSZER törli a PDF-fájlt a fájlrendszerből. Vegye figyelembe, hogy ez az extra kód nem szükséges a képhez társított kategória bináris adatainak törléséhez. Ez azért van így, mert a képadatok közvetlenül az adatbázisban tárolódnak, ezért a Categories sor törlése az adott kategória képadatait is törli.

A két eseménykezelő hozzáadása után futtassa újra ezt a tesztesetet. A kategória törlésekor a társított PDF-fájl is törlődik.

Egy meglévő rekordhoz társított bináris adatok frissítése érdekes kihívásokat kínál. Az oktatóanyag hátralevő része a brosúra és a kép frissítési képességeinek hozzáadását ismerteti. A 6. lépés a brosúra információinak frissítésére szolgáló technikákat, míg a 7. lépés a kép frissítését vizsgálja.

6. lépés: Kategória brosúra frissítése

Az adatok beszúrásának, frissítésének és törlésének áttekintésével foglalkozó oktatóanyagban leírtaknak megfelelően a GridView beépített sorszintű szerkesztési támogatást nyújt, amely a jelölőnégyzet bejelölésével implementálható, ha az alapul szolgáló adatforrás megfelelően van konfigurálva. Az ObjectDataSource jelenleg nincs konfigurálva CategoriesDataSource frissítési támogatás biztosítására, ezért adjuk hozzá.

Kattintson az ObjectDataSource varázsló Adatforrás konfigurálása hivatkozására, és folytassa a második lépésben. A használt DataObjectMethodAttribute elem miatt az CategoriesBLL UPDATE legördülő listát automatikusan fel kell tölteni annak a UpdateCategory túlterhelésnek a megfelelő változatával, amely négy bemeneti paramétert fogad el (minden oszlopra, kivéve Picture). Módosítsa ezt úgy, hogy a túlterhelést öt paraméterrel használja.

Az ObjectDataSource konfigurálása a kép paraméterét tartalmazó UpdateCategory metódus használatára

9. ábra: Konfigurálja az ObjectDataSource-t a UpdateCategory paramétert Picture tartalmazó metódus használatára (kattintson ide a teljes méretű kép megtekintéséhez)

Az ObjectDataSource mostantól tartalmaz egy értéket a tulajdonságához UpdateMethod , valamint a megfelelő UpdateParameter s-hez. A 4. lépésben leírtak szerint a Visual Studio az ObjectDataSource OldValuesParameterFormatString tulajdonságát original_{0} értékre állítja az Adatforrás konfigurálása varázsló használatakor. Ez problémákat fog okozni a frissítési és törlési metódushívásokkal kapcsolatban. Ezért törölje teljesen a tulajdonságot, vagy állítsa vissza az alapértelmezett értékre. {0}

A varázsló befejezése és a OldValuesParameterFormatStringjavítás után az ObjectDataSource deklaratív korrektúrája a következőképpen fog kinézni:

<asp:ObjectDataSource ID="CategoriesDataSource" runat="server" 
    OldValuesParameterFormatString="{0}" SelectMethod="GetCategories" 
    TypeName="CategoriesBLL" InsertMethod="InsertWithPicture" 
    DeleteMethod="DeleteCategory" UpdateMethod="UpdateCategory">
    <InsertParameters>
        <asp:Parameter Name="categoryName" Type="String" />
        <asp:Parameter Name="description" Type="String" />
        <asp:Parameter Name="brochurePath" Type="String" />
        <asp:Parameter Name="picture" Type="Object" />
    </InsertParameters>
    <DeleteParameters>
        <asp:Parameter Name="categoryID" Type="Int32" />
    </DeleteParameters>
    <UpdateParameters>
        <asp:Parameter Name="categoryName" Type="String" />
        <asp:Parameter Name="description" Type="String" />
        <asp:Parameter Name="brochurePath" Type="String" />
        <asp:Parameter Name="picture" Type="Object" />
        <asp:Parameter Name="categoryID" Type="Int32" />
    </UpdateParameters>
</asp:ObjectDataSource>

A GridView beépített szerkesztési funkcióinak bekapcsolásához jelölje be a Szerkesztés engedélyezése lehetőséget a GridView intelligens címkéjén. Ezzel a CommandField ShowEditButton tulajdonságát true értékre állítja, ami egy Szerkesztés gomb (és a Frissítés és Mégse gombok a szerkesztett sorhoz) hozzáadását eredményezi.

A GridView konfigurálása a szerkesztés támogatásához

10. ábra: A GridView konfigurálása a szerkesztés támogatásához (kattintson ide a teljes méretű kép megtekintéséhez)

Nyissa meg a lapot egy böngészőben, és kattintson az egyik sor Szerkesztés gombjára. A CategoryName és Description BoundFields szövegdobozokként jelennek meg. A BrochurePath TemplateField hiányzik EditItemTemplate, ezért továbbra is megjeleníti a brosúra hivatkozását ItemTemplate. Az Picture ImageField szövegmezőként jelenik meg, amelynek Text tulajdonsága az ImageField s DataImageUrlField értékéhez van rendelve, ebben az esetben CategoryID.

A GridView nem rendelkezik a BrosúraPath szerkesztőfelületével

11. ábra: A GridView nem rendelkezik szerkesztőfelülettel BrochurePath (kattintson a teljes méretű kép megtekintéséhez)

AzBrochurePaths szerkesztőfelület testreszabása

Létre kell hoznunk egy szerkesztőfelületet a BrochurePath TemplateFieldhez, amely lehetővé teszi a felhasználó számára a következő műveletek egyikét:

  • Hagyja el a kategória brosúráját as-is.
  • Frissítse a kategória brosúrát egy új brosúrával, vagy
  • Távolítsa el a kategória brosúra teljes egészét (abban az esetben, ha a kategória már nem rendelkezik társított brosúrával).

Az ImageField szerkesztőfelületét is frissíteni Picture kell, de ezt a 7. lépésben fogjuk elérni.

A GridView intelligens címkéjén kattintson a Sablonok szerkesztése hivatkozásra, és válassza ki a BrochurePath TemplateField s EditItemTemplate elemet a legördülő listából. Adjon hozzá egy RadioButtonList webvezérlőt ehhez a sablonhoz, és állítsa be a ID tulajdonságát BrochureOptions értékre, valamint a AutoPostBack tulajdonságát true értékre. A Gyűjteményszerkesztő megnyitásához kattintson a Items tulajdonság három pont ikonra, amely megjeleníti a ListItem Gyűjteményszerkesztőt. Adja hozzá az alábbi három lehetőséget: Value s 1, 2 és 3.

  • Az aktuális brosúra használata
  • Az aktuális brosúra eltávolítása
  • Új brosúra feltöltése

Az első ListItem s Selected tulajdonságot állítsd be true.

Három listaelem hozzáadása a RadioButtonListhez

12. ábra: Három ListItem s hozzáadása a RadioButtonListhez

A RadioButtonList alatt adjon hozzá egy FileUpload vezérlőt.BrochureUpload Állítsa a Visible tulajdonságát falseértékre.

RadioButtonList és FileUpload vezérlő hozzáadása az EditItemTemplate-hoz

13. ábra: RadioButtonList és FileUpload vezérlő hozzáadása a (EditItemTemplate teljes méretű kép megtekintéséhez)

Ez a RadioButtonList három lehetőséget biztosít a felhasználó számára. Az ötlet az, hogy a FileUpload vezérlő csak akkor jelenik meg, ha az utolsó lehetőség, az Új brosúra feltöltése lehetőség van kiválasztva. Ehhez hozzon létre egy eseménykezelőt a RadioButtonList eseményéhez SelectedIndexChanged , és adja hozzá a következő kódot:

protected void BrochureOptions_SelectedIndexChanged(object sender, EventArgs e)
{
    // Get a reference to the RadioButtonList and its Parent
    RadioButtonList BrochureOptions = (RadioButtonList)sender;
    Control parent = BrochureOptions.Parent;
    // Now use FindControl("controlID") to get a reference of the 
    // FileUpload control
    FileUpload BrochureUpload = 
        (FileUpload)parent.FindControl("BrochureUpload");
    // Only show BrochureUpload if SelectedValue = "3"
    BrochureUpload.Visible = (BrochureOptions.SelectedValue == "3");
}

Mivel a RadioButtonList és a FileUpload vezérlők egy sablonon belül találhatók, meg kell írnunk egy kis kódot a vezérlők programozott eléréséhez. Az SelectedIndexChanged eseménykezelő a RadioButtonList referenciáját adja át a sender bemeneti paraméterben. A FileUpload vezérlő eléréséhez először meg kell szereznünk a RadioButtonList szülővezérlőjét, majd ott használjuk a FindControl("controlID") metódust. Ha a RadioButtonList és a FileUpload vezérlőre is hivatkozunk, a FileUpload vezérlő tulajdonsága Visible csak akkor van beállítva true , ha a RadioButtonList értéke SelectedValue 3, ami az Value Új brosúra ListItemfeltöltése.

Miután beállította a kódot, szánjon egy kis időt a szerkesztőfelület tesztelésére. Kattintson a Szerkesztés gombra egy sorban. Kezdetben az Aktuális brosúra használata lehetőséget kell választani. A kijelölt index megváltoztatása visszacsatolást okoz. Ha a harmadik lehetőség van kiválasztva, megjelenik a FileUpload vezérlő, ellenkező esetben rejtett. A 14. ábrán a szerkesztőfelület látható, amikor a Szerkesztés gombra kattint; A 15. ábrán az Új brosúra feltöltése lehetőség kiválasztása után látható a felület.

Kezdetben az Aktuális brosúra használata lehetőség van kiválasztva

14. ábra: Kezdetben az Aktuális brosúra használata lehetőség van kiválasztva (kattintson ide a teljes méretű kép megtekintéséhez)

Az Új brosúra feltöltése beállítás kiválasztása – A FileUpload vezérlő megjelenítése

15. ábra: Az Új brosúra feltöltése beállítás kiválasztása A Fájlfeltöltés vezérlő megjelenítése (ide kattintva megtekintheti a teljes méretű képet)

A brosúrafájl mentése és azBrochurePathoszlop frissítése

Amikor a GridView frissítés gombjára kattint, RowUpdating az esemény aktiválódik. A rendszer meghívja az ObjectDataSource frissítési parancsát, majd elindítja a GridView-eseményt RowUpdated . A törlési munkafolyamathoz hasonlóan mindkét eseményhez létre kell hoznunk eseménykezelőket. Az eseménykezelőben RowUpdating meg kell határoznunk, hogy milyen műveletet kell végrehajtanunk a SelectedValueBrochureOptions RadioButtonList alapján:

  • Ha az SelectedValue értéke 1, ugyanazt a BrochurePath beállítást szeretnénk használni. Ezért az ObjectDataSource paraméterét brochurePath a frissítendő rekord meglévő BrochurePath értékére kell állítani. Az ObjectDataSource brochurePath paramétere e.NewValues["brochurePath"] = value segítségével állítható be.
  • Ha az SelectedValue érték 2, akkor a rekord s BrochurePath értékét a következőre szeretnénk NULLbeállítani: . Ez úgy érhető el, hogy az ObjectDataSource brochurePath paramétert Nothing értékre állítja, ami az adatbázis NULLUPDATE utasításban történő használatát eredményezi. Ha egy meglévő brosúrafájl el van távolítva, törölni kell a meglévő fájlt. Ezt azonban csak akkor szeretnénk megtenni, ha a frissítés kivétel nélkül befejeződik.
  • Ha a SelectedValue fájl 3, akkor biztosítani szeretnénk, hogy a felhasználó feltöltött egy PDF-fájlt, majd mentse a fájlrendszerbe, és frissítse a rekord oszlopértékét BrochurePath . Ezenkívül ha egy meglévő brosúrafájlt cserélnek le, törölni kell az előző fájlt. Ezt azonban csak akkor szeretnénk megtenni, ha a frissítés kivétel nélkül befejeződik.

Amikor a RadioButtonList SelectedValue 3-ra van állítva, a szükséges lépések gyakorlatilag azonosak a DetailsView ItemInserting eseménykezelő által végrehajtott lépésekkel. Ezt az eseménykezelőt akkor hajtja végre a rendszer, ha új kategóriarekordot ad hozzá az előző oktatóanyagban hozzáadott DetailsView vezérlőből. Ezért célszerű ezt a funkciót külön metódusokra bontani. Konkrétan két módszerre helyeztem át a közös funkciókat:

  • ProcessBrochureUpload(FileUpload, out bool) Bemenetként egy FileUpload vezérlőpéldányt és egy kimeneti logikai értéket fogad el, amely meghatározza, hogy a törlési vagy szerkesztési műveletnek folytatnia kell-e, vagy valamilyen érvényesítési hiba miatt le kell-e mondania. Ez a metódus visszaadja a mentett fájl elérési útját, vagy null ha nem mentette a fájlt.
  • DeleteRememberedBrochurePath törli a lapváltozó deletedCategorysPdfPath elérési útján megadott fájlt, ha deletedCategorysPdfPath nem null.

A két módszer kódja a következő. Figyelje meg a hasonlóságot a ProcessBrochureUpload és az előző oktatóanyag DetailsView eseménykezelője ItemInserting között. Ebben az oktatóanyagban frissítettem a DetailsView eseménykezelőit az új módszerek használatára. Töltse le az oktatóanyaghoz társított kódot a DetailsView eseménykezelőinek módosításainak megtekintéséhez.

private string ProcessBrochureUpload
    (FileUpload BrochureUpload, out bool CancelOperation)
{
    CancelOperation = false;    // by default, do not cancel operation
    if (BrochureUpload.HasFile)
    {
        // Make sure that a PDF has been uploaded
        if (string.Compare(System.IO.Path.GetExtension(BrochureUpload.FileName), 
            ".pdf", true) != 0)
        {
            UploadWarning.Text = 
                "Only PDF documents may be used for a category's brochure.";
            UploadWarning.Visible = true;
            CancelOperation = true;
            return null;
        }
        const string BrochureDirectory = "~/Brochures/";
        string brochurePath = BrochureDirectory + BrochureUpload.FileName;
        string fileNameWithoutExtension = 
            System.IO.Path.GetFileNameWithoutExtension(BrochureUpload.FileName);
        int iteration = 1;
        while (System.IO.File.Exists(Server.MapPath(brochurePath)))
        {
            brochurePath = string.Concat(BrochureDirectory, fileNameWithoutExtension, 
                "-", iteration, ".pdf");
            iteration++;
        }
        // Save the file to disk and set the value of the brochurePath parameter
        BrochureUpload.SaveAs(Server.MapPath(brochurePath));
        return brochurePath;
    }
    else
    {
        // No file uploaded
        return null;
    }
}
private void DeleteRememberedBrochurePath()
{
    // Is there a file to delete?
    if (deletedCategorysPdfPath != null)
    {
        System.IO.File.Delete(Server.MapPath(deletedCategorysPdfPath));
    }
}

A GridView RowUpdating és RowUpdated eseménykezelők a ProcessBrochureUpload és DeleteRememberedBrochurePath metódusokat használják az alábbi kód szerint:

protected void Categories_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    // Reference the RadioButtonList
    RadioButtonList BrochureOptions = 
        (RadioButtonList)Categories.Rows[e.RowIndex].FindControl("BrochureOptions");
    // Get BrochurePath information about the record being updated
    int categoryID = Convert.ToInt32(e.Keys["CategoryID"]);
    CategoriesBLL categoryAPI = new CategoriesBLL();
    Northwind.CategoriesDataTable categories = 
        categoryAPI.GetCategoryByCategoryID(categoryID);
    Northwind.CategoriesRow category = categories[0];
    if (BrochureOptions.SelectedValue == "1")
    {
        // Use current value for BrochurePath
        if (category.IsBrochurePathNull())
            e.NewValues["brochurePath"] = null;
        else
            e.NewValues["brochurePath"] = category.BrochurePath;
    }
    else if (BrochureOptions.SelectedValue == "2")
    {
        // Remove the current brochure (set it to NULL in the database)
        e.NewValues["brochurePath"] = null;
    }
    else if (BrochureOptions.SelectedValue == "3")
    {
        // Reference the BrochurePath FileUpload control
        FileUpload BrochureUpload = 
            (FileUpload)Categories.Rows[e.RowIndex].FindControl("BrochureUpload");
        // Process the BrochureUpload
        bool cancelOperation = false;
        e.NewValues["brochurePath"] = 
            ProcessBrochureUpload(BrochureUpload, out cancelOperation);
        e.Cancel = cancelOperation;
    }
    else
    {
        // Unknown value!
        throw new ApplicationException(
            string.Format("Invalid BrochureOptions value, {0}", 
                BrochureOptions.SelectedValue));
    }
    if (BrochureOptions.SelectedValue == "2" || 
        BrochureOptions.SelectedValue == "3")
    {
        // "Remember" that we need to delete the old PDF file
        if (category.IsBrochurePathNull())
            deletedCategorysPdfPath = null;
        else
            deletedCategorysPdfPath = category.BrochurePath;
    }
}
protected void Categories_RowUpdated(object sender, GridViewUpdatedEventArgs e)
{
    // If there were no problems and we updated the PDF file, 
    // then delete the existing one
    if (e.Exception == null)
    {
        DeleteRememberedBrochurePath();
    }
}

Figyelje meg, hogy az RowUpdating eseménykezelő feltételes utasítások sorozatával hajtja végre a megfelelő műveletet a BrochureOptions RadioButtonList SelectedValue tulajdonságértéke alapján.

Ezzel a kóddal szerkesztheti a kategóriát, és kiválaszthatja, hogy az aktuális brosúrát használja, ne használjon brosúrát, vagy feltölt egy újat. "Menjen és próbálja ki. Állítson be töréspontokat az RowUpdating és RowUpdated eseménykezelőkben, hogy jobban megismerje a munkafolyamatot."

7. lépés: Új kép feltöltése

Az Picture ImageField szerkesztőfelülete szövegdobozként jelenik meg, amely a DataImageUrlField tulajdonságából származó értékkel van kitöltve. A szerkesztési munkafolyamat során a GridView egy paramétert ad át az ObjectDataSource-nak, amelynek a paraméter neve az ImageField s DataImageUrlField tulajdonság értéke, a paraméter értéke pedig a szerkesztőfelületen a szövegmezőbe beírt érték. Ez a viselkedés akkor megfelelő, ha a rendszerképet fájlként menti a fájlrendszerbe, és a DataImageUrlField rendszerkép teljes URL-címét tartalmazza. Ilyen körülmények között a szerkesztőfelület megjeleníti a kép URL-címét a szövegmezőben, amelyet a felhasználó megváltoztathat, és visszamentett az adatbázisba. Ez az alapértelmezett felület nem teszi lehetővé, hogy a felhasználó új képet töltsön fel, de lehetővé teszi, hogy a rendszerkép URL-címét az aktuális értékről egy másikra módosítsa. Ebben az oktatóanyagban azonban az ImageField alapértelmezett szerkesztőfelülete nem elegendő, mert a Picture bináris adatok közvetlenül az adatbázisban kerülnek tárolásra, és a DataImageUrlField tulajdonság csak a CategoryID-t tartalmazza.

Ha jobban meg szeretné tudni, hogy mi történik az oktatóanyagban, amikor egy felhasználó szerkeszt egy sort egy Képmezővel, vegye figyelembe a következő példát: egy felhasználó egy 10-et tartalmazó CategoryID sort szerkeszt, így az Picture ImageField 10 értékű szövegdobozként jelenik meg. Tegyük fel, hogy a felhasználó a szövegmező értékét 50-re módosítja, és a Frissítés gombra kattint. Visszaküldés történik, és a GridView kezdetben létrehoz egy CategoryID paramétert, amelynek értéke 50. Mielőtt azonban a GridView elküldi ezt a paramétert (és CategoryName a Description paramétereket), hozzáadja a DataKeys gyűjtemény értékeit. Ezért felülírja a CategoryID paramétert az aktuális sor alapjául szolgáló CategoryID értékével (10). Röviden: az ImageField szerkesztőfelülete nincs hatással az oktatóanyag szerkesztési munkafolyamatára, mert az ImageField DataImageUrlField tulajdonsága és a rács DataKey értéke megegyezik.

Bár az ImageField megkönnyíti a képek adatbázisadatokon alapuló megjelenítését, nem szeretnénk szövegdobozt biztosítani a szerkesztőfelületen. Ehelyett egy FileUpload-vezérlőt szeretnénk kínálni, amellyel a végfelhasználó módosíthatja a kategória képét. BrochurePath Az értéktől eltérően ezen oktatóanyagok esetében úgy döntöttünk, hogy minden kategóriának rendelkeznie kell képpel. Ezért nem kell hagynunk, hogy a felhasználó jelezze, hogy nincs társított kép, a felhasználó feltölthet egy új képet, vagy elhagyhatja az aktuális képet as-is.

Az ImageField szerkesztési felületének testreszabásához sablonmezővé kell alakítanunk. A GridView intelligens címkéjén kattintson az Oszlopok szerkesztése hivatkozásra, válassza ki az ImageField elemet, majd kattintson a "Konvertálja ezt a mezőt sablonmezővé" hivatkozásra.

Az ImageField átalakítása sablonmezővé

16. ábra: Az ImageField átalakítása sablonmezővé

Az ImageField sablonmezővé alakítása így létrehoz egy Sablonmezőt két sablonnal. Ahogy az alábbi deklaratív szintaxis is mutatja, a ItemTemplate egy Image Web vezérlőt tartalmaz, amelynek ImageUrl tulajdonságát az adatkötési szintaxissal rendelik hozzá, az ImageField DataImageUrlField és DataImageUrlFormatString tulajdonságai alapján. A EditItemTemplate szövegmező olyan szövegdobozt tartalmaz, amelynek Text tulajdonsága a tulajdonság által DataImageUrlField megadott értékhez van kötve.

<asp:TemplateField>
    <EditItemTemplate>
        <asp:TextBox ID="TextBox1" runat="server" 
            Text='<%# Eval("CategoryID") %>'></asp:TextBox>
    </EditItemTemplate>
    <ItemTemplate>
        <asp:Image ID="Image1" runat="server" 
            ImageUrl='<%# Eval("CategoryID", 
                "DisplayCategoryPicture.aspx?CategoryID={0}") %>' />
    </ItemTemplate>
</asp:TemplateField>

Frissítenünk kell a EditItemTemplate-t, hogy a FileUpload vezérlőt használja. A GridView intelligens címkéjén kattintson a Sablonok szerkesztése hivatkozásra, majd válassza ki a Picture TemplateField s EditItemTemplate elemet a legördülő listából. A sablonban látnia kell, hogy egy Szövegdoboz eltávolítja ezt a elemet. Ezután húzzon egy FileUpload vezérlőt az eszköztárból a sablonba, és állítsa be a ID következőre PictureUpload. Adja hozzá a szöveget A kategória képének módosításához adjon meg egy új képet. Ha a kategória képe változatlan marad, hagyja üresen a mezőt a sablonban is.

FileUpload-vezérlő hozzáadása az EditItemTemplate-hoz

17. ábra: Fájlbetöltési vezérlő hozzáadása a EditItemTemplate fájlhoz (kattintson ide a teljes méretű kép megtekintéséhez)

A szerkesztőfelület testreszabása után tekintse meg az előrehaladást egy böngészőben. Amikor egy sort írásvédett módban tekintünk meg, a kategória képe ugyanúgy jelenik meg, mint korábban, de amikor a Szerkesztés gombra kattintunk, a képoszlop szövegként, a FileUpload vezérlővel együtt jelenik meg.

A szerkesztőfelület tartalmaz egy FileUpload vezérlőt

18. ábra: A szerkesztőfelület tartalmaz egy FileUpload vezérlőt (kattintson ide a teljes méretű kép megtekintéséhez)

Ne feledje, hogy az ObjectDataSource úgy van konfigurálva, hogy meghívja a CategoriesBLL osztály UpdateCategory metódusát, amely tömbként fogadja a képek bináris adatait byte. Ha ennek a tömbnek van egy null értéke, a rendszer meghívja az alternatív UpdateCategory verziót, amely kiadja a UPDATE SQL-utasítást, amely nem módosítja a Picture oszlopot, így a kategória aktuális képe változatlan marad. Ezért a GridView eseménykezelőjében RowUpdating programozott módon hivatkoznunk kell a PictureUpload FileUpload vezérlőre, és meg kell határoznunk, hogy feltöltöttek-e egy fájlt. Ha egy nem lett feltöltve, akkor nem szeretnénk értéket megadni a picture paraméterhez. Másrészt, ha egy fájlt feltöltöttek a PictureUpload FileUpload vezérlőbe, szeretnénk meggyőződni arról, hogy jpg fájlról van szó. Ha igen, akkor a paraméteren keresztül picture elküldhetjük a bináris tartalmát az ObjectDataSource-nak.

A 6. lépésben használt kódhoz hasonlóan az itt szükséges kód nagy része már létezik a DetailsView ItemInserting eseménykezelőjében. Ezért újrabontásra került a közös funkció egy új metódusra, ValidPictureUploadés frissítettem az ItemInserting eseménykezelőt ennek a metódusnak a használatára.

Adja hozzá a következő kódot a GridView eseménykezelőjének RowUpdating elejéhez. Fontos, hogy ez a kód a brosúrafájlt mentő kód elé kerül, mivel érvénytelen képfájl feltöltése esetén nem szeretnénk a brosúrát a webkiszolgáló fájlrendszerébe menteni.

// Reference the PictureUpload FileUpload
FileUpload PictureUpload = 
    (FileUpload)Categories.Rows[e.RowIndex].FindControl("PictureUpload");
if (PictureUpload.HasFile)
{
    // Make sure the picture upload is valid
    if (ValidPictureUpload(PictureUpload))
    {
        e.NewValues["picture"] = PictureUpload.FileBytes;
    }
    else
    {
        // Invalid file upload, cancel update and exit event handler
        e.Cancel = true;
        return;
    }
}

A ValidPictureUpload(FileUpload) metódus egyetlen bemeneti paraméterként egy FileUpload vezérlőt használ, és ellenőrzi a feltöltött fájl kiterjesztését, hogy a feltöltött fájl JPG formátumú legyen, és csak képfájl feltöltése esetén hívja meg. Ha nem tölt fel fájlt, akkor a képparaméter nincs beállítva, ezért az alapértelmezett értékét nullhasználja. Ha egy kép feltöltése és ValidPictureUpload visszaadása truemegtörtént, a paraméter a picture feltöltött kép bináris adataihoz lesz hozzárendelve; ha a metódus visszatér false, a frissítési munkafolyamat megszakad, és az eseménykezelő kilép.

A ValidPictureUpload(FileUpload) DetailsView ItemInserting eseménykezelőből újrabontásra került metóduskód a következő:

private bool ValidPictureUpload(FileUpload PictureUpload)
{
    // Make sure that a JPG has been uploaded
    if (string.Compare(System.IO.Path.GetExtension(PictureUpload.FileName), 
            ".jpg", true) != 0 &&
        string.Compare(System.IO.Path.GetExtension(PictureUpload.FileName), 
            ".jpeg", true) != 0)
    {
        UploadWarning.Text = 
            "Only JPG documents may be used for a category's picture.";
        UploadWarning.Visible = true;
        return false;
    }
    else
    {
        return true;
    }
}

8. lépés: Az eredeti kategóriák képeinek cseréje JPG-kre

Ne feledje, hogy az eredeti nyolc kategóriakép egy OLE fejlécbe burkolt bitképfájl. Most, hogy hozzáadtuk a meglévő rekordkép szerkesztésének képességét, szánjon egy kis időt ezeknek a bitképeknek a JPG-kre való cseréjére. Ha továbbra is használni szeretné az aktuális kategóriaképeket, az alábbi lépések végrehajtásával konvertálhatja őket JPG-kké:

  1. Mentse a bitképképeket a merevlemezre. Keresse fel a UpdatingAndDeleting.aspx böngészőben a lapot, és az első nyolc kategória mindegyikéhez kattintson a jobb gombbal a képre, és mentse a képet.
  2. Nyissa meg a képet a választott képszerkesztőben. Használhatja például a Microsoft Paintet.
  3. Mentse a bitképet JPG-képként.
  4. Frissítse a kategória képét a szerkesztőfelületen a JPG fájl használatával.

Miután szerkesztett egy kategóriát, és feltöltötte a JPG-képet, a kép nem jelenik meg a böngészőben, mert az DisplayCategoryPicture.aspx oldal az első 78 bájtot az első nyolc kategória képeiről távolítja el. Ezt úgy oldhatja meg, hogy eltávolítja az OLE fejlécleszűkítést végrehajtó kódot. Ezt követően az DisplayCategoryPicture.aspx``Page_Load eseménykezelőnek csak a következő kóddal kell rendelkeznie:

protected void Page_Load(object sender, EventArgs e)
{
    int categoryID = Convert.ToInt32(Request.QueryString["CategoryID"]);
    // Get information about the specified category
    CategoriesBLL categoryAPI = new CategoriesBLL();
    Northwind.CategoriesDataTable categories = _
        categoryAPI.GetCategoryWithBinaryDataByCategoryID(categoryID);
    Northwind.CategoriesRow category = categories[0];
    // For new categories, images are JPGs...
    
    // Output HTTP headers providing information about the binary data
    Response.ContentType = "image/jpeg";
    // Output the binary data
    Response.BinaryWrite(category.Picture);
}

Megjegyzés:

A UpdatingAndDeleting.aspx lap beszúrási és szerkesztési felületei egy kicsit több munkát is igénybe vehetnek. A CategoryName DetailsView és a GridView mezőinek és Description BoundField-mezőinek Sablonmezőkké kell alakulnia. Mivel CategoryName nem engedélyezi NULL az értékeket, hozzá kell adni egy RequiredFieldValidatort. A Description Szövegdobozt valószínűleg többsoros Szövegdobozlá kell konvertálni. Ezeket az utolsó simításokat gyakorlásként hagyom neked.

Összefoglalás

Ez az oktatóanyag bemutatja a bináris adatokkal való munkát. Ebben az oktatóanyagban és az előző háromban láttuk, hogyan tárolhatók a bináris adatok a fájlrendszerben vagy közvetlenül az adatbázisban. A felhasználó bináris adatokat biztosít a rendszernek úgy, hogy kiválaszt egy fájlt a merevlemezéről, és feltölti azt a webkiszolgálóra, ahol a fájlrendszerben tárolhatja vagy beszúrhatja az adatbázisba. ASP.NET 2.0 tartalmaz egy FileUpload vezérlőt, amely az ilyen felületet azonos egyszerűséggel teszi elérhetővé, mint a húzás és ejtés. A Fájlok feltöltése oktatóanyagban leírtak szerint azonban a FileUpload vezérlő csak viszonylag kis méretű fájlfeltöltésekhez használható, ideális esetben nem haladja meg a megabájtot. Azt is megvizsgáltuk, hogyan társíthatók a feltöltött adatok a mögöttes adatmodellhez, valamint hogyan szerkeszthetjük és törölhetjük a bináris adatokat a meglévő rekordokból.

A következő oktatóanyagok különböző gyorsítótárazási technikákat ismernek meg. A gyorsítótárazás lehetővé teszi az alkalmazások általános teljesítményének javítását azáltal, hogy figyelembe veszi a költséges műveletek eredményeit, és olyan helyen tárolja őket, amely gyorsabban elérhető.

Boldog programozást!

Tudnivalók a szerzőről

Scott Mitchell, hét ASP/ASP.NET-könyv szerzője és a 4GuysFromRolla.com alapítója, 1998 óta dolgozik a Microsoft webtechnológiáival. Scott független tanácsadóként, edzőként és íróként dolgozik. Legújabb könyve Sams Tanuld meg ASP.NET 2.0 24 óra alatt. Ő itt elérhető mitchell@4GuysFromRolla.com.

Külön köszönet

Ezt az oktatóanyag-sorozatot sok hasznos véleményező áttekintette. Az oktatóanyag vezető véleményezője Teresa Murphy volt. Szeretné áttekinteni a közelgő MSDN-cikkeimet? Ha igen, írj egy sort a mitchell@4GuysFromRolla.com-ra.