2016-07-28 14 views
0

HILFE! Ist es möglich, mithilfe der LinkButton- oder Gridview_RowDeleting-Methode eine Datei gleichzeitig aus einer DataBase und aus einem Ordner zu löschen? Unten ist mein Code ein Linkbutton mit:Gleichzeitiges Löschen einer Datei aus einer DataBase und einem Ordner mithilfe einer LinkButton- oder Gridview_RowDeleting-Methode

<asp:TemplateField> 
<ItemTemplate> 
<asp:LinkButton ID = "lnkDelete" Text = "Delete" OnClientClick="return confirm('Are you sure you want to delete this record?');" CommandArgument = '<%# DataBinder.Eval(Container.DataItem,"ID") %>' runat = "server" OnClick = "DeleteFile" /> 
</ItemTemplate> 
</asp:TemplateField> 

-Code Behind:

protected void grdProducts_RowEditing(object sender, GridViewEditEventArgs e) 
    { 
     //Get seleted row 
     GridViewRow row = grdProducts.Rows[e.NewEditIndex]; 

     //Get Id of selected product 
     int rowId = Convert.ToInt32(row.Cells[1].Text); 

     //Redirect user to Manage Products along with the selected rowId 
     Response.Redirect("~/Pages/Management/ManageProducts.aspx?id=" + rowId); 
    } 

    protected void DeleteFile(object sender, EventArgs e) 

    { 

     string filePath = (sender as LinkButton).CommandArgument; 
     File.Delete(filePath); 
     Response.Redirect(Request.Url.AbsoluteUri); 


    } 

PL: Ich habe eine bestehende gridview und eine Datenquelle für meinen Tisch.

+0

Du schickst '<% ​​# DataBinder.Eval (Container.DataItem, "ID")%>' als das Commandargument, dann nehmen, dass Command in DeleteFile() und Sie es nennen filePath ... filePath enthält die Daten, die als "ID" gebunden sind, an die der Pfad der tatsächlichen Datei übergeben werden soll ... Können Sie das als CommandArgument angeben? –

+0

Wenn Sie den Pfad der Datei auf die gleiche Weise bereitstellen können, wie Sie '<% # DataBinder.Eval (Container.DataItem," ID ")%>' ... vielleicht so etwas wie '<% # DataBinder.Eval (Container.DataItem, "FilePath")%> 'dann bist du da –

+0

Ich habe versucht" filePath "... Ich habe diesen Fehler msg: DataBinding: 'System.Data.DataRowView' enthält keine Eigenschaft mit dem Namen 'filePath'. –

Antwort

0

Vielen Dank für Ihren Beitrag. Ich habe später die Antwort darauf bekommen. Ich werde es gerne mit allen teilen. Aktivieren Sie OnRowDeleting in Ihren Gridview-Eigenschaften und verwenden Sie den folgenden Code.

protected void grdProducts_RowDeleting(object sender, GridViewDeleteEventArgs e) 

    { 
     Image oImg = grdProducts.Rows[e.RowIndex].FindControl("ImageFile") as Image; 
     if (oImg != null) 
     { 
      string sUrl = oImg.ImageUrl; 

      File.Delete(Server.MapPath(sUrl)); 

      grdProducts.DataBind(); 
     } 
    } 
} 

Schließlich: Legen Sie dieses TemplateField auf Ihrer Aspx-Seite.

<asp:TemplateField> 
    <ItemTemplate> 
     <asp:Image ID="ImageFile" runat="server" ImageUrl='<%# Bind("Image", "Images/Products/{0}")%>' AlternateText="Picture unavailable" style="width:50px; height:40px" />      
    </ItemTemplate> 
    </asp:TemplateField>