我正在尝试从Gridview1中删除记录,同时只需单击即可从服务器上删除相应的图像文件。 (Gridview1中的每一行都在服务器上有一个关联的图像文件。)
要删除记录,我正在使用asp:CommandField showDeleteButton="true"
以及sqlDataSource
的{{1}}声明。
在此过程中,我还使用DELETE
的“GridView1
”事件从服务器上删除相应的图像文件。
这就是它的作用,我的代码如下:
还要考虑:
我已经设置并测试了一个更简单的“看看文件是否可以实际删除
我在Gridview上开始开发之前的服务器“测试。因为我们的文件在托管上
公司服务器,我想测试任何权限问题。
因此:
在文本框中输入fileName和扩展名(“myImage.jpg”)
单击使用onRowDeleting
方法的按钮
WhaaLa - 文件已从服务器中消失。
然而,我无法通过我的新设置获取该文件。 这是代码:
File.Delete
代码背后:
<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>
答案 0 :(得分:2)
我认为你的问题的一部分可能是为了让e.Values["sku"]
包含一个值,它必须先绑定。我不认为HyperlinkField
绑定了它的数据(我可能错了,尽管不要引用我)
首先尝试在列列表中添加<asp:BoundField DataField="sku" Visible="false" />
。或者将HyperLinkField更改为TemplateField并显式绑定sku '<%#Bind("sku")%>'
如果不起作用,您可以尝试将DataKeyNames="libraryID"
更改为DataKeyNames="libraryID,sku"
。您应该可以从e.Keys["sku"]
或e.Values["sku"]
中获取值。
答案 1 :(得分:0)
使用GridView控件开始开发之后,您是否通过在那里设置断点来验证是否正在调用deleteImageFromServer方法?
是否正确设置了imageToDelete?
进入后,查看'sender'和'e'的'watch'值。深入研究它们,看看它们是什么类型的物体以及它们拥有的价值。
有时您必须遍历GridVied控件中的对象层次结构才能到达正确的对象。