2013-10-02 21 views
3

我想將二進制圖像顯示到名爲'gvExistedCharacter'的gridview中。我研究過它,其中許多人建議使用處理程序。但是,我不知道該怎麼辦。如何使用C#在ASP.NET中顯示二進制圖像到gridview中?

僅供參考:數據庫中圖像的數據類型是圖像並命名爲'blueBallImage'。我也想在同一個gridview中顯示它的int級別。

我試圖

SqlConnection con = new SqlConnection(@"Data Source=localhost;Initial Catalog=MyCloudGames;Integrated Security=True"); 

    SqlCommand cmd = new SqlCommand("Select blueBallImage FROM CorrespondingBall", con); 
    cmd.CommandType = System.Data.CommandType.Text; 
    cmd.Connection = con; 

    SqlParameter ImageID = new SqlParameter("@characterID", System.Data.SqlDbType.Int); 
    ImageID.Value = context.Request.QueryString["characterID"]; 
    cmd.Parameters.Add(ImageID); 
    con.Open(); 
    SqlDataReader dReader = cmd.ExecuteReader(); 
    dReader.Read(); 
    context.Response.BinaryWrite((byte[])dReader["Image"]); 
    dReader.Close(); 
    con.Close(); 

我接收到錯誤「的參數化查詢 '(@characterID INT)選擇blueBallImage FROM CorrespondingBall' 預計參數 '@characterID',但未提供該」。

回答

4

您可以使用處理器可以顯示在GridView的形象,你的HTML標記看起來像裏面

Gridview ItemTemplate集圖像控制SRC爲src=~/ShowImage.ashx?id=" + id

其中ShowImage.ashx是你的處理器,其返回的MemoryStream((字節[])IMG );

這裏我的一個類似的文章如何獲得二進制數據顯示爲圖像

Blog Article: Convert Binary data to image, Save and retrieve image from binary data asp.net c#

在你的情況你的查詢字符串是characterID

讓你的圖片src將src=~/ShowImage.ashx?id=" + characterID


更新答:

HTML標記:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"> 
    <Columns> 
     <asp:TemplateField HeaderText="CharacterID"> 
      <ItemTemplate> 
       <asp:Label ID="lblid" runat="server" Text='<%# Bind("characterID") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="GameLevel"> 
      <ItemTemplate> 
       <asp:Label ID="lblglevel" runat="server" Text='<%# Bind("gameLevel") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Image"> 
      <ItemTemplate> 
       <asp:Image ID="Image1" runat="server" ImageUrl='<%#"ShowImage.ashx?getID="+Eval("characterID") %>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

後面的代碼:

protected void Page_Load(object sender, EventArgs e) 
{   
    DataTable dt = getData(); 
    GridView1.DataSource = dt; 
    GridView1.DataBind(); 
    } 

public DataTable getData() 
{ 
    SqlDataAdapter dap = new SqlDataAdapter("select characterID,blueBallImage,gameLevel from CorrespondingBall", cn); 
    DataSet ds = new DataSet(); 
    dap.Fill(ds); 
    return ds.Tables[0]; 
} 

通用處理器:添加新的通用處理器這裏showIamges.ashx是我的通用處理器

public void ProcessRequest(HttpContext context) 
{ 
    Int32 my_Id; 
    if (context.Request.QueryString["getID"] != null) 
    { 
     my_Id = Convert.ToInt32(context.Request.QueryString["getID"]); 
     context.Response.ContentType = "image/jpeg"; 
     Stream strm = ShowEmpImage(my_Id); 
     byte[] buffer = new byte[4096]; 
     int byteSeq = strm.Read(buffer, 0, 4096); 
     while (byteSeq > 0) 
     { 
      context.Response.OutputStream.Write(buffer, 0, byteSeq); 
      byteSeq = strm.Read(buffer, 0, 4096); 
     } 
     } 
} 

public Stream ShowEmpImage(int my_Id) 
{ 
    string conn = ConfigurationManager.ConnectionStrings["constr"].ConnectionString; 
    SqlConnection connection = new SqlConnection(conn); 
    string sql = "select blueBallImage from CorrespondingBall WHERE characterID = @ID"; 
    SqlCommand cmd = new SqlCommand(sql, connection); 
    cmd.CommandType = CommandType.Text; 
    cmd.Parameters.AddWithValue("@ID", my_Id); 
    connection.Open(); 
    object img = cmd.ExecuteScalar(); 
    return new MemoryStream((byte[])img); 
} 
+0

嗨Satinder,我想問你一個問題。 @ characterID實際上是什麼?我看到了一些教程,他們在那裏放置了類似@ ID等的東西。請原諒我,因爲我之前沒有使用過處理程序。 –

+0

id reperesnt你想要顯示圖像的哪一行?可能有一些關係,即像employeid ,, empname,employe_image列,所以在gridview你binddata ID,名稱,圖片 –

+0

我仍然無法得到它。如果我想要顯示blueBallImage的每個圖像,該怎麼辦? –

0

您想要將@characterID參數添加到您的sql命令中,但是您的命令沒有一個名爲@characterID的參數。

在您的代碼中刪除您的參數過程,或者在sql命令中添加@characterID來嘗試匹配。

+0

嗨,Soner,我想顯示所有blueBallImage圖像。我可以知道我該怎麼做? –

相關問題