2009-04-27 11 views
0

J'ai un gridview qui affiche les données d'une base de données. La base de données stocke le nom de fichier de l'image (chaîne) entre autres choses pour un article.Téléchargement d'une image via la question gridview

J'ai le contrôle fileupload dans la vue EDIT, et cela télécharge le fichier très bien. Le problème est, je veux mettre à jour le nom de fichier d'image dans la base de données et je ne suis pas sûr comment obtenir les données au contrôle textbox que le gridview utilise pour mettre à jour la base de données. Le contrôle textbox j'ai mis la visibilité à caché. voici le code ASPX:

<asp:TemplateField HeaderText="Image" SortExpression="Image"> 
       <EditItemTemplate> 
        <asp:TextBox ID="txtImage" runat="server" Text='<%# Bind("Image") %>' Visible="False" OnTextChanged="txtImage_TextChanged"></asp:TextBox> 
        <asp:FileUpload ID="FileUpload1" runat="server" /> 
       </EditItemTemplate> 
       <ItemTemplate>       
        <asp:Image ID="Image1" runat="server" Width="50px" AlternateText='<%# Eval("Image") %>' ImageUrl='<%# "images/hardware/" + Eval("Image") %>' /> 
       </ItemTemplate> 
      </asp:TemplateField> 

Et est la fonction ici qui stocke le fichier sur le serveur, et place le nom de fichier dans une variable:

 protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 
     GridViewRow row = GridView1.Rows[e.RowIndex]; 
     FileUpload fileUpload = row.Cells[0].FindControl("FileUpload1") as FileUpload; 
     if (fileUpload != null && fileUpload.HasFile) 
     { 
      strFileName = fileUpload.FileName; 
      fileUpload.SaveAs(Server.MapPath("images/hardware/" + strFileName)); 
      TextBox txtImage = row.Cells[0].FindControl("txtImage") as TextBox; 
      txtImage.Text = strFileName; 
     } 
    } 

Alors, où puis-je aller d'ici? Je pense que la mise à jour a déjà eu lieu ou quelque chose? Parce que le "txtImage.Text" ne met pas à jour la base de données ... Suis-je en panne ici ou quelque chose? Je peux manipuler des valeurs dans la zone de texte dans cette fonction avant qu'il soit enregistré dans la base de données droite? Merci pour votre aide sur celui-ci.

Répondre

1

Si vous gérez la mise à jour de la base de données dans le code, vous devriez pouvoir obtenir le nom du fichier comme dans GridView1_RowUpdating. Trouvez simplement la ligne dans la grille en mode édition. Chaque ligne dans la collection de lignes sur la grille a une propriété RowState ... votre recherche DataControlRowState.Edit

+0

Pas vraiment de mise à jour dans le code derrière je ne pense pas ... J'utilise la propriété "UpdateQuery" de l'ensemble de données pour gérer la mise à jour. – Kolten

+0

Votre réponse ci-dessous semble bien, lorsque vous n'êtes pas en mesure de lier deux éléments en ajoutant leurs valeurs à la collection de mise à jour en accrochant un événement de source de données est le chemin à parcourir – Jon

0

Je pense que j'ai une solution, mais j'aimerais savoir si c'est un bon moyen de le coder. J'ai cette configuration que l'événement « Mise à jour » pour l'ensemble de données les utilisations gridview:

 protected void SetRecords(object sender, SqlDataSourceCommandEventArgs e) 
    { 
     if (strFileName != "") 
     { 
      e.Command.Parameters["@Image"].Value = strFileName; 
     } 
    } 

Est-ce ok? Tout semble fonctionner très bien ... mais est-ce une bonne façon de résoudre le problème? Je voudrais coder correctement et ne pas commencer de mauvaises pratiques de codage dès le début (je suis un développeur ASP classique accompli passant à C# et ASP.NET) Merci à tous!