2016-07-28 2 views
0

ПОМОЩЬ! Можно ли использовать метод LinkButton или Gridview_RowDeleting для одновременного удаления файла из базы данных и из папки? Ниже мой код, используя LinkButton:Одновременное удаление файла из базы данных и папки с использованием метода LinkButton или Gridview_RowDeleting

<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> 

Код За:

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: У меня есть существующий GridView и источник данных для моего стола.

+0

Вы посылаете '<% # DataBinder.Eval (Container.DataItem, "ID")%>' как CommandArgument, то принимая, что CommandArgument в DeleteFile(), и вы называете это Filepath ... Filepath будет содержать данные, привязанные как «ID», где он должен быть передан путь фактического файла ... можете ли вы указать это как CommandArgument? –

+0

Если вы можете предоставить путь к файлу так же, как вы указываете '<% # DataBinder.Eval (Container.DataItem,« ID »)%>' ... возможно, что-то вроде '<% # DataBinder.Eval (Container.DataItem, «FilePath»)%> ', тогда вы там –

+0

Я пробовал« filePath »... У меня была эта ошибка msg: DataBinding:« System.Data.DataRowView »не содержит свойства с именем« filePath ». –

ответ

0

Спасибо всем за ваш вклад. Позже я получил ответ на этот вопрос. Я хотел бы поделиться им со всеми. Просто включите OnRowDeleting в свойствах Gridview, а затем используйте следующий код.

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(); 
     } 
    } 
} 

И наконец: положите этот шаблон на страницу aspx.

<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> 
Смежные вопросы