0

长话短说:我想将图像放在 DataTable 的列中。为此,我从各种其他来源收集了需要将图像转换为字节的信息,然后将字节分配给所需的 DataRow 列。

所以我已经得到了几乎我需要的东西,除了我找到的所有指南都是用于引用系统上的文件。我需要转换的图像在项目中。

这是我所拥有的,缩写:

DataColumn amountcol = new DataColumn();
amountcol.DataType = System.Type.GetType("System.Byte[]");
//...
newrow = dt.NewRow();
newrow[amountcol] = ReadImage("images/dashboard/myvacstatus-am.png", new string[] { ".png" });

private static byte[] ReadImage(string p_postedImageFileName, string[] p_fileType)
{
    bool isValidFileType = false;

    try
    {
        FileInfo file = new FileInfo(p_postedImageFileName);

        foreach (string strExtensionType in p_fileType)
        {
            if (strExtensionType == file.Extension)
            {
                isValidFileType = true;
                break;
            }
        }

        if (isValidFileType)
        {
            FileStream fs = new FileStream(p_postedImageFileName, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fs);
            byte[] image = br.ReadBytes((int)fs.Length);
            br.Close();
            fs.Close();
            return image;
        }

        return null;
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

问题:它在系统上查找文件,而不是在项目中。

我收到以下错误:

找不到路径“C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0\images\dashboard\myvacstatus-ampm.png”的一部分。

4

3 回答 3

1

确保您从中读取图像的路径有效。

更新

使用以下代码获取完整路径。

string path = Server.MapPath("images/dashboard/myvacstatus-am.png")
于 2012-07-04T05:48:46.803 回答
0

尝试使用绝对(即完全限定)路径而不是您指定的无根相对路径(“images/dashboard/myvacstatus-am.png”)。

您可能不应该尝试从项目文件夹层次结构中读取文件。相反,指定将文件部署到部署目录(或子文件夹),然后从那里读取它们。否则,如果您将应用程序分发给非开发人员用户,您将遇到麻烦。

于 2012-07-04T05:52:47.253 回答
0

为了在 Web 应用程序文件夹结构中查找文件,您可以使用Server.MapPath("/relative/url/tofile.png").

这将找到该文件,您可以将其读入内存并执行需要执行的操作。但仅将结果分配给byte[]DataList 的数据源不会导致显示图像。

为了显示图像,您需要:

  • <img ... />在正确的位置添加标签DataList
  • 图片的src属性应该指向可以找到图片数据的地方

根据您的设置(您明确表示该文件在项目中),您应该能够使用如下内容:

<asp:Image ID="image_myvacstatus" runat="server" 
    ImageUrl="~/images/dashboard/myvacstatus-am.png" />

无需将其加载到内存中并分配给 ListView 的数据源。

如果您需要根据每行的一些其他数据来确定要显示哪个图像,那么您可以在数据绑定之前在数据源中添加正确的图像名称并使用:

<asp:Image ID="image_myvacstatus" runat="server" 
    ImageUrl='<%# "~/images/dashboard/" + (string)Eval("imageName") %>' />
于 2012-07-04T06:18:27.487 回答