1

以下のコードで GridView セルに画像を追加したいのですが、画像が表示されません

//aspx
 <asp:TemplateField HeaderText="image">
      <ItemTemplate>
          <asp:Image ID="img" runat="server" Width="100px" Height="100px" />
      </ItemTemplate>

//.cs -> In page_Load

for (int i = 0; i < GridView1.Rows.Count; i++)
{
      Image img = (Image)GridView1.Rows[i].FindControl("img");
      img.ImageUrl = path of image;
 }//for
4

3 に答える 3

0

データベースから画像へのパスを直接指定できます

<ItemTemplate>
      <asp:Image ID="img" runat="server" Width="100px" Height="100px" ImageUrl='<%# Eval("Imageurl") %>' />
  </ItemTemplate>

または alt タグで URL を指定し、rowdatabound で使用します。

if (e.Row.RowType == DataControlRowType.DataRow)
{
    Image image1 = ((Image)e.Row.FindControl("img"));
    img.ImageUrl = image1.Alt; // You can check for path here if no image found     
}

グリッドビューを介してループを使用することは適切な方法ではなく、パフォーマンスが低下します

于 2012-12-10T13:50:36.700 に答える
0

イベントを使用RowDataBoundして、GridView 行内の何かを変更できます。

protected void GridView1_RowDatabound(object sender, GridViewRowEventArgs e)
{
    // check if this row is a row with Data (not Header or Footer)
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        // find your Image control in the Row
        Image image = ((Image)e.Row.FindControl("img"));
        // set the path of image
        img.ImageUrl = "path of image";     
    }
}

または、ステートメントを使用foreachして Rows コレクションをループし、画像のパスを変更することもできます。このコードは Page_Load イベントにある可能性があります。

foreach(GridViewRow row in GridView1.Rows)
{ 
    // check if this row is a row with Data (not Header or Footer)
    if (row.RowType == DataControlRowType.DataRow)
    {
        // find your Image control in the Row
        Image image = ((Image)row.FindControl("img"));
        // set the path of image
        img.ImageUrl = "path of image";     
    }
}

編集

ソリューションから画像を設定することはできません。これを行うには、ハンドラー (.ashx ファイル) を作成し、C: でイメージの名前を渡し、次のようなバイト [] を返す必要があります。

public void ProcessRequest(HttpContext context)
{
    byte[] imageBytes = File.ReadAllBytes(@"C:\" + context.Request["image"]);
    context.Response.ContentType = "image/png";
    context.Response.BinaryWrite(imageBytes);
}

そしてあなたのページで、imageURLにパラメータを渡すハンドラーによってそれを設定します:

Image image = ((Image)row.FindControl("img"));
img.ImageUrl = "ImageHandler.ashx?image=1.png";
于 2012-12-10T13:30:22.590 に答える
0

このイベントPage_Loadは、GridView が自身をデータバインドまたは作成する前に発生します。それらがすべて同じ画像になる場合は、そのパスを ItemTemplate に設定してみませんか? コード ビハインドに入るまでパスがわからないことが原因である場合は、テンプレートの ImageUrl をカスタム プロパティにバインドし、そのプロパティを Page_Load に設定して、プロパティに値を設定することができます。それ以外の場合、必要な変更はすべて RowDataBound イベントで行う必要があります。

于 2012-12-10T13:33:32.230 に答える