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

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 に答える
0

指定したルート化されていない相対パス ("images/dashboard/myvacstatus-am.png") ではなく、絶対 (完全修飾) パスを使用してみてください。

おそらく、プロジェクト フォルダー階層からファイルを読み取ろうとするべきではありません。代わりに、ファイルが配置ディレクトリ (またはサブ フォルダー) に配置されるように指定し、そこからファイルを読み取ります。そうしないと、開発者以外のユーザーにアプリケーションを配布するときに問題が発生します。

于 2012-07-04T05:52:47.253 に答える