0

私はasp.net Gridviewコントロールを持っています.2つの列を表示します.1つはテキストフィールドで、もう1つは画像フィールドです. グリッドは展開可能で、すべての画像を表示する必要があります。ページを実行すると、すべての行の画像が同じものを表示しています。この問題を解決するにはどうすればよいですか?

![グリッド ビューの結果][1]

Imagehandler ファイルを使用しました

     SqlConnection conn = new SqlConnection(connString);
     string sqlsts = "SELECT us.name, us.image from userdetails as us where us.user_id in (select user_id from user_team where team_id  in (select team_id from teaminfo where teamname='" + team + "'))";
     SqlCommand command = new SqlCommand(sqlsts, conn);
     conn.Open();
     DataTable dtst = new DataTable();
     SqlDataAdapter adp = new SqlDataAdapter(sqlsts, conn);
     adp.Fill(dtst);
     int roc = dtst.Rows.Count;
     int coc = dtst.Columns.Count;
     for (int i = 0; i < roc; i++)
     {
         Byte[] imageData = (Byte[])dtst.Rows[i]["image"];
         context.Response.BinaryWrite((Byte[])dtst.Rows[i]["image"]);
         context.Response.ContentType = "image/jpeg";
         context.Response.End();
      }
4

1 に答える 1

0

ハンドラーはループを実行していますが、最初に遭遇した画像のみを返します。

これらの行を呼び出すことにより....:

     context.Response.BinaryWrite((Byte[])dtst.Rows[i]["image"]);
     context.Response.ContentType = "image/jpeg";
     context.Response.End();

.....基本的に「OK、今すぐ停止してその画像を吐き出すことができます」と言っている-ループ内の他の画像には到達しません。

ハンドラーは実際には SINGLE 画像のみを返す必要があります。

したがって、ハンドラーを変更して、1 つの画像のみを配信するようにします。表示する画像の ID をクエリ文字列に入れてから、グリッドビューからハンドラーを呼び出すことができます。

のようなもの (例、テストされていません)

  <asp:TemplateField  HeaderText="MyImage">
     <ItemTemplate>
        <asp:Image runat="server" ImageURL='<%# Eval("imageID", "myHandler.ashx?id={0}") %>' />
     </ItemTemplate>
  </asp:TemplateField>

ハンドラーはidクエリ文字列を取得し、データベースから適切な画像を選択してから選択できるようになりResponse.BinaryWrite()ました。

于 2013-06-05T19:41:37.750 に答える