Gridview1 からレコードを削除すると同時に、対応する画像ファイルをサーバーからワンクリックで削除しようとしています。(Gridview1 の各行には、サーバー上の関連付けられたイメージ ファイルがあります)。
レコードを削除するには 、のステートメントasp:CommandField showDeleteButton="true"
と一緒に使用しています。sqlDataSource
DELETE
そのプロセス中に、GridView1
の " onRowDeleting
" イベントを使用して、対応する画像ファイルをサーバーから削除しています。
以下にコードを示します。
- レコードは実際に削除されます。
- サーバー上のファイルはそうではありません。
- スローされるエラーはありません (ファイルが見つからないと思いますが、これは予想される動作です)。
また、考慮してください: Gridviewで開発を開始する前に、はるかに簡単な「サーバーからファイルを実際に削除できるかどうかを確認する」テストをすでにセットアップしてテストしました。私たちのファイルはホスティング会社のサーバー上にあるため、権限の問題をテストしたかったのです。それによって: ファイル名と拡張子をテキスト ボックス ("myImage.jpg") に入力しますFile.Delete
。WhaaLa メソッドを使用するボタンをクリックします。ファイルはサーバーから削除されます。
ただし、新しいセットアップでファイルを削除することはできません。コードは次のとおりです。
<asp:GridView ID="GridView1" runat="server" AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="libraryID"
DataSourceID="SqlDataSource1" Width="800px" onrowdeleting="deleteImageFromServer" CssClass="gridViewSmallText"
OnDataBound="rowCount">
<Columns>
<asp:CommandField ShowDeleteButton="True" />
<%--A link that goes to the uploadPage to upload a new version of the image--%>
<asp:HyperLinkField runat="server" HeaderText="SKU (Click to Update)" DataTextField="sku" DataNavigateUrlFields="sku" SortExpression="sku" DataNavigateUrlFormatString="graphicUpload.aspx?sku={0}" >
</asp:HyperLinkField>
<asp:TemplateField HeaderText="Image" SortExpression="imagePath">
<ItemTemplate>
<%--Pull the imagePath column from the database here-it also includes the image file --%>
<asp:Image ID="merchImage" runat="server" Height="100px" ImageUrl='<%# "http://www.ourcompanysite.net/" + DataBinder.Eval(Container.DataItem, "imagePath") %>' /><br />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="View Full Size">
<ItemTemplate>
<%--A link to view the image in it's full size in a new browser window--%>
<asp:HyperLink ID="fullSizeHyperlink" runat="server" NavigateUrl='<%# "http://www.leadingjewelersguild.net/" + DataBinder.Eval(Container.DataItem, "imagePath") %>' Text="View" Target="_blank" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="DateUpdated" </asp:BoundField>
<%---some date stuff here--%>
<asp:BoundField DataField="DateCreated" HeaderText="First Uploaded" SortExpression="DateCreated" >
</asp:BoundField>
</Columns>
</asp:GridView>
コードビハインド:
protected void deleteImageFromServer(object sender, GridViewDeleteEventArgs e)
{
// I read from GridViewGuy.com that you're supposed to reference the row item via e.Values
string imageToDelete = e.Values["sku"] + ".jpg";
//I pulled the value of "imageToDelete" into a lable just to see what I was getting
//during the "onRowDeleting" and it reported back .jpg instead of the full file name
//myImage.jpg, so I guess this is the crux of my problem.
string image = Server.MapPath("/images/graphicsLib/" + imageToDelete);
string image = Server.MapPath("e:\\sites\\oursite\\files\\images\\graphicsLib\\" + imageToDelete);
if (File.Exists(image))
{
File.Delete(image);
}
//at this point the record from GridView1 is gone, but the file on server remains.
}