IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Image stockee en base de donnees, quoi mettre dans ImageUrl ?


Sujet :

ASP.NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 460
    Points : 112
    Points
    112
    Par défaut Image stockee en base de donnees, quoi mettre dans ImageUrl ?
    Salut !

    Je reviens vers vous car j'ai un problème pour afficher une image dans un Gridview. J'ai trouvé ces codes sur le Net... Mais ça ne m'avance guère !

    Voici le code C# :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    protected void Page_Load(object sender, EventArgs e)
            {
                dplintitule = Request.QueryString["Intitule"];
                dplid = Convert.ToInt32(Request.QueryString["Id"]);
                Label1.Text = "Bienvenue à toi, " + dplintitule + ".";
                Label4.Text = BL.ArticleBL.SommePrixArticleparPers(dplid).ToString();
     
                if (Request.QueryString["Id"] != null)
                {
                    string strQuery = "select A.Intitule, A.Description, A.Prix, A.Photo FROM Articles as A inner join Listes as L on A.Id_Liste = L.Id_Liste inner join Personnes as P on L.Id_Personne = P.Id_Personne where P.Id_Personne = @Id_Personne ";
                    String strConnString = "Data Source=" + System.Environment.MachineName + "\\SQLEXPRESS; Database=Listenoel;UID=Michael;PWD=****";
                    SqlCommand cmd = new SqlCommand(strQuery);
                    cmd.Parameters.Add("@Id_Personne", SqlDbType.Int).Value = Convert.ToInt32(Request.QueryString["Id"]);
                    SqlConnection con = new SqlConnection(strConnString);
                    SqlDataAdapter sda = new SqlDataAdapter();
                    cmd.CommandType = CommandType.Text;
                    cmd.Connection = con;
                    DataTable dt = new DataTable();
                    try
                    {
                        con.Open();
                        sda.SelectCommand = cmd;
                        sda.Fill(dt);                    
                        GridView2.DataSource = dt;
                        GridView2.DataBind();                    
                    }
                    catch
                    {
                        dt = null;
                    }
                    finally
                    {
                        con.Close();
                        sda.Dispose();
                        con.Dispose();
                    }
                    if (dt != null)
                    {
                        Byte[] bytes = (Byte[])dt.Rows[0]["Photo"];
                        Response.Buffer = true;
                        Response.Charset = "";
                        Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
                        Response.ContentType = dt.Rows[0]["Photo"].ToString();
                        Response.AppendHeader("content-disposition", "attachment;filename=" + dt.Rows[0]["Intitule"].ToString());
                        Response.BinaryWrite(bytes);
                        Response.Flush();
                        Response.End();
                    }
                }
    }
    Les lignes 44 et 55 ne font pas du tout ce à quoi je m'attendais...


    Et le code ASP.Net :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns = "false" Font-Names = "Arial" Caption = "Using ImageControl">
                     <Columns>
                         <asp:BoundField DataField = "ID" HeaderText = "ID" />
                         <asp:BoundField DataField = "Name" HeaderText = "Image Name" />
                         <asp:TemplateField>
                             <ItemTemplate>
                                 <asp:Image ID="Image1" Height = "100" Width = "100" runat="server" ImageUrl = '' />
                             </ItemTemplate>
                         </asp:TemplateField> 
                     </Columns>
                </asp:GridView>
    Je ne sais absolument pas ce que je dois mettre dans le champ ImageUrl de la ligne 7...


    Merci d'avance pour votre aide, car je deviens maboul !

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    En gros tu dois utiliser un HttpHandler : Displaying Images in ASP.NET Using HttpHandlers.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 460
    Points : 112
    Points
    112
    Par défaut
    Voilà, j'ai enfin trouvé...

    Je poste la "soluce" si ça intéresse qqn...

    La classe ImageHandler (attention, encore quelques trucs à corriger...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    public class ImageHandler : IHttpHandler
        {
     
            public void ProcessRequest(HttpContext context)
            {
                string Id_Personne = "4";//context.Request.QueryString.Keys["Id_Personne"];
                SqlConnection con = new SqlConnection("Data Source=" + System.Environment.MachineName + "\\SQLEXPRESS; Database=Listenoel;UID=Michael;PWD=****");            
                SqlCommand cmd = new SqlCommand("select A.Intitule, A.Description, A.Prix, A.Photo FROM Articles as A inner join Listes as L on A.Id_Liste = L.Id_Liste inner join Personnes as P on L.Id_Personne = P.Id_Personne where P.Id_Personne = @Id_Personne");
                cmd.Parameters.Add("@Id_Personne", System.Data.SqlDbType.Int).Value = 4;// Convert.ToInt32(context.Request.QueryString["Id"]);            
                cmd.Connection = con;            
                DataTable dt = new DataTable();
                SqlDataAdapter ada=null;
                try
                {
                    con.Open();
                    ada = new SqlDataAdapter(cmd);
                    ada.Fill(dt);
                    Byte[] bytes = (Byte[])dt.Rows[0]["Photo"];
                    context.Response.BinaryWrite(bytes);
                }
                catch
                {
                    dt = null;
                }
                finally
                {
                    con.Close();
                    ada.Dispose();
                    con.Dispose();
                }
                if (dt != null)
                {                
                    context.Response.Flush();
                    context.Response.End();
                }
            }
     
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
    Le code ASP.Net :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" CellPadding="4" ForeColor="#333333" GridLines="None">
                    <AlternatingRowStyle BackColor="White" />
                    <Columns>
                        <asp:BoundField DataField="Intitule" HeaderText="Intitule" SortExpression="Intitule" />
                        <asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" />
                        <asp:BoundField DataField="Prix" HeaderText="Prix" SortExpression="Prix" />
                        <asp:ImageField DataImageUrlField="Photo" DataImageUrlFormatString="ImageHandler.ashx?Photo={0}" HeaderText="Photo">
                        </asp:ImageField>
                    </Columns>
                    <EditRowStyle BackColor="#7C6F57" />
                    <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
                    <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
                    <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
                    <RowStyle BackColor="#E3EAEB" />
                    <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
                    <SortedAscendingCellStyle BackColor="#F8FAFA" />
                    <SortedAscendingHeaderStyle BackColor="#246B61" />
                    <SortedDescendingCellStyle BackColor="#D4DFE1" />
                    <SortedDescendingHeaderStyle BackColor="#15524A" />
                </asp:GridView>

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 460
    Points : 112
    Points
    112
    Par défaut
    J'ai encore un p'tit souci...

    Voici le code de mon gridview :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" CellPadding="4" ForeColor="#333333" GridLines="None" OnRowDataBound="GridView1_RowDataBound" >
                    <AlternatingRowStyle BackColor="White" />
                    <Columns>
                        <asp:BoundField DataField="Intitule" HeaderText="Intitule" SortExpression="Intitule" />
                        <asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" />
                        <asp:BoundField DataField="Prix" HeaderText="Prix" SortExpression="Prix" />            
                        <asp:ImageField DataImageUrlField="Photo" DataImageUrlFormatString='ImageHandler.ashx?Photo={0}&MonId=?????' HeaderText="Photo" >
                        </asp:ImageField>
                    </Columns>
                    <EditRowStyle BackColor="#7C6F57" />
                    <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
                    <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
                    <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
                    <RowStyle BackColor="#E3EAEB" />
                    <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
                    <SortedAscendingCellStyle BackColor="#F8FAFA" />
                    <SortedAscendingHeaderStyle BackColor="#246B61" />
                    <SortedDescendingCellStyle BackColor="#D4DFE1" />
                    <SortedDescendingHeaderStyle BackColor="#15524A" />
                </asp:GridView>
    A la ligne 7, il y a ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataImageUrlFormatString='ImageHandler.ashx?Photo={0}&MonId=?????'
    A la place des "?????", je voudrais mettre une variable issue du code behind :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public Int32 dplid = 0;
    Je l'écris comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataImageUrlFormatString='ImageHandler.ashx?Photo={0}&MonId=<%#(dplid)%>'
    Malheureusement, ça ne fonctionne pas ! Dans le reste du code, cette instruction ('<%#(dplid)%>') fonctionne bien (elle me renvoie bien un Int32, la valeur de dplid), mais pas là et je ne comprends vraiment pas pourquoi !

    Si vous pouvez m'aider !

    NB: j'ai bien fait le databind de mon gridview dans le code behind !

Discussions similaires

  1. affichage d'une image a partir base de donnees
    Par malek2011 dans le forum VB.NET
    Réponses: 0
    Dernier message: 05/02/2011, 12h34
  2. Quoi mettre dans le groupeId ?
    Par thierryler dans le forum Maven
    Réponses: 8
    Dernier message: 27/11/2007, 14h47
  3. Afficher une image depuis ma base de données MySQL
    Par hnoumbo dans le forum Outils
    Réponses: 3
    Dernier message: 16/08/2006, 08h57
  4. Afficher une image de la base de données dans une jsp
    Par treivse dans le forum Struts 1
    Réponses: 1
    Dernier message: 26/06/2006, 09h38
  5. Réponses: 2
    Dernier message: 13/05/2006, 13h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo