PDA

View Full Version : ستون hyperlink در datagrid



elahe_rahmanzadeh
پنج شنبه 31 خرداد 1386, 01:27 صبح
سلام
من سایتی طراحی کردم (کتابخانه مجازی)که کاربر میتونه با یک جستجوی ساده کتابهای مورد نظر خودش رو پیدا کنه و کتابها در یک datagrid نمایش داده می شوند.این datagrid یک ستون به نام "مشخصات", از نوع hyperlink وجود داره که کاربر با کلیک کردن اون hyperlink به یک صفحه دیگه(Download.aspx ) باید هدایت بشه تا بتونه مشخصات کامل کتاب رو ببینه و در صفحه download.aspx هم یک hyperlink دیگه به نام "دریافت" وجود داره که با کلیک کردن اون باید بتونه کتاب مورد نظر رو دانلود کنه.حالا من 2 تا مشکل دارم:
1-چطوری میشه با کلیک کردن hyperlink "مشخصات", یکی از ستون های datagrid (رو که کد کتاب است)و مربوط به همون ردیف, رو برای صفحه download فرستاد؟؟آخه ستون hyperlink هیچ event ی نداره!!
2-چطور میشه با کلیک کردن hyperlike "دریافت", فایل pdf مربوطه رو دانلود کرد؟؟

Amir Taghavi
پنج شنبه 31 خرداد 1386, 05:59 صبح
1. شما باید Property های مربوط به Hyperlink رو ست کنید.

DataTextField="ID" 'ID: Your ID field name
DataNavigateUrlFormatString="~/Download.aspx?BookID={0}'Redirect to download page

2. با استفاده از کد زیر:


Dim myStream As New FileStream("Filename", FileMode.Open, FileAccess.Read)
Dim buffer As Byte() = New Byte(CType(myStream.Length, Integer)) {}
myStream.Read(buffer, 0, CType(myStream.Length, Integer))
myStream.Close()
Response.Clear()
Response.ContentType = "application/octet-stream"
Response.AddHeader("Content-Length", buffer.Length.ToString())
Response.AddHeader("Content-Disposition", "attachment; filename=FileName")
Response.BinaryWrite(buffer)
Response.End()

elahe_rahmanzadeh
پنج شنبه 31 خرداد 1386, 20:51 عصر
از راهنمایی تون ممنون.اما حالا در صفحه download مشکل پیدا کردم.یعنی id کتاب به این صفحه فرستاده میشه اما نمیتونم فیلدهای این کتاب خاص رو در textbox های اون صفحه نشون بدم.در اصل کدی که در صفحه download می نویسم اینه:


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load




Dim a As String

a = Request.QueryString("id").ToString()
Dim connectionString As String = "server='(local)'; trusted_connection=true; database='a'"
Dim dbConnection As System.Data.IDbConnection = New System.Data.SqlClient.SqlConnection(connectionStri ng)
Dim queryString As String = "SELECT distinct [tbl_books].[format],[tbl_books].[type]" & _
",[tbl_books].[languag],[tbl_books].[abstract]," & _
"[tbl_books].[price],[tbl_books].[capacity], " & _
"[tbl_books].[ISBN], [tbl_books].[edition], " & _
"[tbl_books].[pub_year],[tbl_books].[publi" & _
"sher],[tbl_books].[translator], " & _
"dbo.fn_concat_bookid([tbl_books].[book_id]) as author" & _
", [tbl_books].[name_book]" & _
" FROM [tbl_auther] INNER JOIN" & _
"[tbl_book_auther] ON [tbl_auther].[auther_id] = [tbl_book_auther].[auther_id] INNER JOIN" & _
"[tbl_books] ON [tbl_book_auther].[book_id] = [tbl_books].[book_id]" & _
" WHERE [tbl_books].[book_id]=" + a
Dim dbCommand As System.Data.IDbCommand = New System.Data.SqlClient.SqlCommand
dbCommand.CommandText = queryString
dbCommand.Connection = dbConnection
dbConnection.Open()
Dim dataReader As System.Data.IDataReader = dbCommand.ExecuteReader(System.Data.CommandBehavio r.CloseConnection)


Label10.Text = dataReader.Item("name_book").ToString()
Label11.Text = dataReader.Item("author").ToString
Label12.Text = dataReader.Item("translator").ToString()
Label13.Text = dataReader.Item("format").ToString()
Label16.Text = dataReader.Item("languag").ToString()
Label19.Text = dataReader.Item("type").ToString()
Label22.Text = dataReader.Item("capacity").ToString()
Label23.Text = dataReader.Item("publisher").ToString()
Label24.Text = dataReader.Item("pub_year").ToString()
Label25.Text = dataReader.Item("edition").ToString()
Label26.Text = dataReader.Item("ISBN").ToString()
Label27.Text = dataReader.Item("price").ToString()
Label28.Text = dataReader.Item("abstract").ToString()
End Sub




و وقتی به خط Label10.Text = dataReader.Item("name_book").ToString() می رسه این error رو می ده:

Error Mesaage: Invalid attempt to read when no data is present.

فکر می کنید علتش چیه؟!؟

elahe_rahmanzadeh
پنج شنبه 31 خرداد 1386, 20:55 عصر
راستی یادم رفت بپرسم که دومین کدی که نوشتید رو در کدوم event اون hyperlink بنویسم؟
و اینکه آدرس فایل های pdf کجا مشخص می شه؟

Amir Taghavi
جمعه 01 تیر 1386, 05:51 صبح
راستی یادم رفت بپرسم که دومین کدی که نوشتید رو در کدوم event اون hyperlink بنویسم؟
و اینکه آدرس فایل های pdf کجا مشخص می شه؟

در Click و آدر س فایل رو بجای FileName قرار بدید.


فکر می کنید علتش چیه؟!؟

بخاطر اینکه هیچ اطلاعاتی وجود نداره! این دستور رو در خود SQL اجرا کن ببین جواب می ده یا نه؟

elahe_rahmanzadeh
جمعه 01 تیر 1386, 09:26 صبح
1-اما hyperlink ,رخداد click نداره!
2-این دستور رو در query analyzer اجرا کردم و درست جواب میگیرم.چون کد کتابی که وجود داره به صفحه download فرستاده میشه,حتی ویژگی hasrowsمتغییرdatareader, صحیح (true) میشه!

elahe_rahmanzadeh
جمعه 01 تیر 1386, 23:45 عصر
آقای تقوی زاده ممکنه دومین کدی که برای دانلود pdfها نوشتین رو کمی توضیح بدین؟؟
ممنون

Amir Taghavi
شنبه 02 تیر 1386, 05:52 صبح
اما hyperlink ,رخداد click نداره!

حق با شماست من LinkButton رو با HyperLink اشتباه گرفتم.

elahe_rahmanzadeh
یک شنبه 03 تیر 1386, 22:00 عصر
پس این کد رو در کدوم event باید بنویسم؟؟
ممکنه دومین کدی که برای دانلود pdfها نوشتین رو کمی توضیح بدین؟؟
ممنون

Amir Taghavi
دوشنبه 04 تیر 1386, 08:33 صبح
ببین برای دانلود دو راه وجود داره: (شاید هم بیشتر!)

1. به آدرس مستقیم فایل Redirect کنی.
2. از کد بالا استفاد کنی.

حالا چون شما می خواهید فایل PDF رو دانلود کنی باید از راه دوم استفاده کنی چون اگه Adobe Reader رو سیستم Client نصب باشه فایل بجای دانلود، Open میشه که شاید زیاد جالب نباشه.!

توضیح کد بالا:

وقتی شما از Server یه Request مکنی، خوب اونم به شما باید جواب بده! حالا شما بهش میگی که جناب Server! بهمرا پاسخت یه فایل رو هم Attach کن. اگه کمی روی کد بیشتر تمرکز کنی خیلی راحت متوجه این موضوع میشید. فقط بجای Filename شما باید آدرس PDF رو قرار بدید. در ضمن برای این کار شما از LinkButton و یا Button استفاده کنید.

sin
سه شنبه 24 مهر 1386, 11:47 صبح
-چطور میشه با کلیک کردن hyperlike "دریافت", فایل pdf مربوطه رو دانلود کرد؟؟

سلام
اگه برای datagrid یک button coulmn به عنوان دریافت بگذاری هم می تونی توی رویداد itemcommand اون کد شماره 2 رو بنویسی