只需单击一次,即可从服务器中删除GridView和文件中的记录

时间:2009-10-23 23:40:08

标签: c# file gridview file-io sqldatasource

我正在尝试从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>

2 个答案:

答案 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控件中的对象层次结构才能到达正确的对象。