PDA

View Full Version : سوال: مشکل نملیش عکس در گرید



moferferi
جمعه 06 مرداد 1391, 22:36 عصر
سلام
من یه تیبل دارم که ششامل یک فیلد id از نوع int و فیلد pic از نوع varbinary دارم
از کد زیر برای ذخیره عکس در دیتابیس استفاده میکنم
fileEntities db = new fileEntities();
tb1 tb = new tb1();
string path = Server.MapPath(".");
tb.pic = System.IO.File.ReadAllBytes(path + "\\images\\123.jpg");
db.AddTotb1(tb);
db.SaveChanges();
Response.Write("ok");
و از کد های زیر برای نمایش عکس در گرید
<%@ WebHandler Language="C#" Class="imagehandler" %>

using System;
using System.Web;
using System.IO;
using System.Drawing.Imaging;
using System.Collections.Generic;
using System.Linq;
using fileModel;

public class imagehandler : IHttpHandler {

public void ProcessRequest (HttpContext context) {
HttpRequest req = context.Request;
string categoryID = "1";
// string categoryID = req.QueryString["id"].ToString();
// Get information about the specified category
fileEntities db = new fileEntities();
var category = from c in db.tb1
where Convert.ToInt32(c.id) == Convert.ToInt32(categoryID)
select c.pic;
int len = category.First().Length;
// Output the binary data
// But first we need to strip out the OLE header
int OleHeaderLength = 78;
int strippedImageLength = len - OleHeaderLength;
byte[] imagdata = new byte[strippedImageLength];
Array.Copy(category.First().ToArray(), OleHeaderLength, imagdata, 0, strippedImageLength);
if ((imagdata) != null)
{
MemoryStream m = new MemoryStream(imagdata);
System.Drawing.Image image = System.Drawing.Image.FromStream(m);
image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
}

}

public bool IsReusable
{
get
{
return false;
}
}


}

و
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AutoGenerateColumns="False" DataKeyNames="id"
DataSourceID="SqlDataSource1" CellPadding="4" ForeColor="#333333"
GridLines="None">
<RowStyle BackColor="#EFF3FB" />
<Columns>
<asp:BoundField DataField="id" HeaderText="id"
InsertVisible="False" ReadOnly="True" SortExpression="id" />
<asp:TemplateField HeaderText="Picture" SortExpression="pic">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("pic") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Image ID="Image1" runat="server" ImageUrl='<%#"ImageHandler.ashx?id="+ Eval("id") %>'/>
</ItemTemplate>
</asp:TemplateField>

</Columns>
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<EditRowStyle BackColor="#2461BF" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:fileConnectionString %>"
SelectCommand="SELECT [id], [pic] FROM [tb1]"></asp:SqlDataSource>
ولی هیچ عکسی نشون داده نمیشه.و فقط فیلد id نشون داده میشه.
ایا روش ارسال عکس به دیتابیس را درست انجام میدم.؟
و چطور میشه یه عکس را در گرید ویو یا کنترل image نشون داد.؟

bftarane
جمعه 06 مرداد 1391, 23:28 عصر
فکر کنم با EntityFrameWork کار کردید شما
من بهش وارد نیستم ولی یه مورد به نظرم رسید چک کنید شاید مشکل حل شد

"\\images\\123.jpg"
رو به
"/images/123.jpg"
تغییر بدید شاید مشکل از این باشه چون من خودم در خاصیت ImageUrl مربوط به ImageButton به صورت زیر آدرس میدم

'<%# Eval("Pic","Images/{0}") %>'
ولی عکسهام در پوشه هست و آدرسشون رو در دیتابیس ذخیره می کنم.

TeacherMath
شنبه 07 مرداد 1391, 00:15 صبح
توی handler شما با ید یه if بزارید و در صورت وجو د کوئری استرینگ با نام id در دیتابیس سراغ عکس با اون id بگردین. واونو روی استریم خروجی بریزید.

moferferi
شنبه 07 مرداد 1391, 00:31 صبح
سلام
جناب bftarane (http://barnamenevis.org/member.php?82506-bftarane)
من خود عکس را به صورت باینری توی دیتابیس ذخیره میکنم نه ادرسشو.
از لحاظ ادرس دهی مشکلی نداره.عکس توی دیتابیس ذخیره میشه.
ولی توی گرید نشون نمیده

و TeacherMath (http://barnamenevis.org/member.php?150212-TeacherMath)
من خودم به صورت دستی کوئری استرینگ را توی url وارد میکنم.و توی handler هم بدون شرط این کار را انجام دادم باز هم عکس و نشون نمیده.

fakhravari
شنبه 07 مرداد 1391, 01:10 صبح
http://barnamenevis.org/showthread.php?350977-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%AA%D8%B5%D9%88%DB%8C%D8%B1-%D8%AF%D8%B1-%D8%AC%D8%AF%D9%88%D9%84-%D8%A8%D8%A7-%D9%81%D8%B1%D9%85%D8%AA-var-binary&highlight=%D9%86%D9%85%D8%A7%DB%8C%D8%B4+%D8%B9%DA %A9%D8%B3+%D8%A8%D8%A7+varbinary+%D8%AF%D8%B1+%DA% AF%D8%B1%DB%8C%D8%AF