通过gridview从文件夹中删除图像

时间:2013-06-11 03:48:05

标签: c# image gridview

我有一个网格视图,我用文件夹中的图像填充。我试图通过获取他们的路径名来删除图像,但它总是返回null:

以下是我用图片填充网格视图的代码:

 protected void GetImage()
    {
        string path = HttpContext.Current.Request.PhysicalApplicationPath + @"Story/Food Fit For A King";
        string[] files = System.IO.Directory.GetFiles(path, "*.jpg");


        IList<ImageFileInfo> imageFileList = new List<ImageFileInfo>();
        foreach (string strFileName in files)
        {
            // Change the Absolute path to relative path of File Name and add to the List
            imageFileList.Add(new ImageFileInfo { FileName = ResolveUrl(strFileName.Replace(Server.MapPath("/"), "~/")) });
        }

        gvStory.DataSource = imageFileList;
        gvStory.DataBind();
    }

以下是我要删除的代码:

  protected void gvStory_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        GridView gvQuestion = (GridView)sender;
        int row = e.RowIndex;

             // Extract Values.
       // string imageName = (TextBox)gvStory.Rows[row].Cells[0].FindControl("TextBox1");// RETURNS NULL 
        Image img = (Image)gvStory.Rows[row].Cells[0].FindControl("Image1");
        string url = img.ImageUrl;
     //   string fileName = Path.GetFullPath(url); // RETURNS NULL 

  //string fileName = Path.Combine(Server.MapPath(@"Story/Food Fit For A King"), imageName);

        File.Delete(fileName);

        GetImage(); 


    }

我是否以正确的方式处理图像的文件路径?但我需要图像的完整路径来删除它,我试图使用Path.GetFullPath(url),它不起作用。需要帮助。

并且是aspx html方面的一部分:

 <asp:TemplateField HeaderText="Images">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Eval("FileName") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("FileName") %>' Width="240" Height="160" />
                    </ItemTemplate>
                </asp:TemplateField>

需要帮助。

1 个答案:

答案 0 :(得分:0)

如果gridview行处于编辑模式,则只有您可以找到<EditItemTemplate>标记内的控件。在editmode中,您将获得rowindex为-1。在其他模式下,rowindex将大于-1,然后您可以找到<ItemTemplate>标记内的控件。否则,您将获得空值。所以,你可以尝试这种方式,

protected void gvStory_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    GridView gvQuestion = (GridView)sender;
    int row = e.RowIndex;
    string fileName ="";
    if(row==-1)
    {
       string imageName = (TextBox)gvStory.Rows[row].Cells[0].FindControl("TextBox1");
       fileName = Path.Combine(Server.MapPath(@"Story/Food Fit For A King"),imageName);
    }
    else
    { 
       Image img = (Image)gvStory.Rows[row].Cells[0].FindControl("Image1");
       string url = img.ImageUrl;
       fileName = Path.GetFullPath(url); 
    }
    File.Delete(fileName);
    GetImage(); 
}
相关问题