0

我有一个网格视图,其中填充了文件夹中的图像。我试图通过获取他们的路径名来删除图像,但它总是返回 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>

在这方面需要帮助。

4

1 回答 1

0

如果 gridview 行将处于编辑模式,那么只有您可以找到<EditItemTemplate>标签内的控件。在编辑模式下,您将获得 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(); 
}
于 2013-06-11T05:18:41.640 回答