PDA

View Full Version : درج یک تگ HTML در میان ردیف های Gridview



javad3151
چهارشنبه 06 دی 1385, 10:46 صبح
سلام
یک Gridview هست که اطلاعات مختلفی را از دیتابیس نشون میده ، چطوری میشه کدی نوشت که مثلا بعد از هر 20 ردیف، یک ردیف خاص (یک تگ HTML) بزاره؟؟

iekrang
چهارشنبه 06 دی 1385, 11:07 صبح
ازSubstring استفاده کنید.
میتونید مثلاً توی یه حلقه متن و چک کنید و به محل مورد نظر تگ رو اضافه کنید.

javad3151
چهارشنبه 06 دی 1385, 11:13 صبح
ممنون، ولی منظور من این نیست
بعنوان مثال وقتی Gridview اطلاعات را از دیتابیس گرفت و 100 رکورد را نمایش داد باید بعد از هر 20 رکورد (20 ردیف) یه تگ خاص اضافه بشه

amir.NET2
چهارشنبه 06 دی 1385, 11:31 صبح
به همین راحتی ها نمی شه

باید یه جوری GridView رو Group بندی کنی

اگه مقاله ای در این مورد پیدا کردم حتما برات می ذارم

javad3151
پنج شنبه 07 دی 1385, 21:58 عصر
به همین راحتی ها نمی شه
ممنون ، ولی ما کردیم شد:
http://aspnet.4guysfromrolla.com/articles/072603-1.aspx

Behrouz_Rad
پنج شنبه 07 دی 1385, 23:55 عصر
سوال خوبی پرسیدی!
تمامی کار در در روال RowDataBound کنترل GridView، انجام می پذیره.
در این روال، دو شرط رو باید بررسی کنی.
1) نوع ردیف که حتما باید از نوع DataRow باشه.
2) اندیس ردیف برای اینکه پس از تعدادی ردیف دلخواه، کار مورد نظرت رو انجام بدی.

تمامی عناصر در GridView، زیر مجموعه ای از کنترل ChildTable هستند.
مشکلی که وجود داره اینه که آرگومان "e" در روال RowDataBound به ردیف جاری اشاره می کنه (به عبارت دیگه به یک تگ TR)
و باید به طریقی از این تگ TR بیرون بیایم تا بتونیم یک ردیف (TR) دلخواه به GridView اضافه کنیم.
پس اگر بتونیم به ChildTable که پدر تمامی کنترل های GridView است دسترسی پیدا کنیم، می تونیم به هدف خود برسیم.
کنترل ها خاصیتی با نام Parent دارند که از طریق اون میشه به پدر(های) کنترل دسترسی داشت.
در ASP.NET برای ایجاد ردیف از کلاس TableRow و برای ایجاد سلولِ ردیف از کلاس TableCell استفاده میشه؛ اما GridView از TableRow پشتیبانی نمی کنه و به جای اون، کلاس شخصی GridViewRow رو معرفی کرده. (در تاپیک "اعمال متداول با GridView" از این کلاس استفاده کردم)
پس ابتدا یک شی از نوع کلاس TableCell ایجاد می کنی و از طریق شی ای که از نوع کلاس GridViewRow ایجاد کردی، یک ردیف (TR) همراه با یک سلول (TD) درون اون ایجاد می کنی.
در نهایت، این ردیف رو به پدر ردیف جاری یعنی کنترل ChildTable نسبت میدیم.
متن HTML تو در یک شیء از نوع کلاس Literal قرار میگیره که این Literal در TableCell جای میگیره.
نکته ای که مهم هست اینه که اگر قصد داشته باشی که تنها یک سلول در ردیف داشته باشی و ردیف های دیگر GridView بیش از یک سلول داشته باشند، نیاز داری تا خاصیت ColumnSpan شیء ایجاد شده از کلاس TableCell رو برابر با تعداد سلول هایی که برای ردیف GridView تعیین کردی قرار بدی.

کد توضیحات فوق:


Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
If (e.Row.RowType = DataControlRowType.DataRow) AndAlso (e.Row.RowIndex = 19) Then
Dim T_CELL As New TableCell
Dim CTL_LITERAL As New Literal
Dim GV_ROW As New GridViewRow(0, 0, DataControlRowType.DataRow, DataControlRowState.Normal)
T_CELL.ColumnSpan = 4
CTL_LITERAL.Text = "<b>Hello World!</b>"
T_CELL.Controls.Add(CTL_LITERAL)
GV_ROW.Controls.Add(T_CELL)
e.Row.Parent.Controls.Add(GV_ROW)
End If
End Sub

موفق باشید.

پ.ن: این جواب رو قبل از اینکه لینک فوق رو بدی آماده کردم اما وقت برای ارسالش نشده بود. روش من ساده تر و بهتر هست.

javad3151
سه شنبه 12 دی 1385, 10:45 صبح
خیلی کارت درسته ، دمت گرم
روش شما بهتر و آسان تره (البته فقط در GridView ، لینک من برای Datagrid بود)
راستش من این کد رو برای این میخواستم که وقتی کاربر GridView را پرینت میکرد ، اطلاعات پایین صفحه نصفه نیمه پرینت میشد و حتی بعضی وقتها نصف اطلاعات یک رکورد در صفحه بعد پرینت میشد (قبلا این سوال را در این بخش مطرح کرده بودم و جوابی نگرفته بودم)
ولی الان مشکلم کاملا حل شد با استفاده از کد بالا ، و استفاده از دستور page-break-after

بای

tc1000
یک شنبه 09 اردیبهشت 1386, 17:12 عصر
سوال خوبی پرسیدی!
تمامی کار در در روال RowDataBound کنترل GridView، انجام می پذیره.
در این روال، دو شرط رو باید بررسی کنی.
1) نوع ردیف که حتما باید از نوع DataRow باشه.
2) اندیس ردیف برای اینکه پس از تعدادی ردیف دلخواه، کار مورد نظرت رو انجام بدی.

تمامی عناصر در GridView، زیر مجموعه ای از کنترل ChildTable هستند.
مشکلی که وجود داره اینه که آرگومان "e" در روال RowDataBound به ردیف جاری اشاره می کنه (به عبارت دیگه به یک تگ TR)
و باید به طریقی از این تگ TR بیرون بیایم تا بتونیم یک ردیف (TR) دلخواه به GridView اضافه کنیم.
پس اگر بتونیم به ChildTable که پدر تمامی کنترل های GridView است دسترسی پیدا کنیم، می تونیم به هدف خود برسیم.
کنترل ها خاصیتی با نام Parent دارند که از طریق اون میشه به پدر(های) کنترل دسترسی داشت.
در ASP.NET برای ایجاد ردیف از کلاس TableRow و برای ایجاد سلولِ ردیف از کلاس TableCell استفاده میشه؛ اما GridView از TableRow پشتیبانی نمی کنه و به جای اون، کلاس شخصی GridViewRow رو معرفی کرده. (در تاپیک "اعمال متداول با GridView" از این کلاس استفاده کردم)
پس ابتدا یک شی از نوع کلاس TableCell ایجاد می کنی و از طریق شی ای که از نوع کلاس GridViewRow ایجاد کردی، یک ردیف (TR) همراه با یک سلول (TD) درون اون ایجاد می کنی.
در نهایت، این ردیف رو به پدر ردیف جاری یعنی کنترل ChildTable نسبت میدیم.
متن HTML تو در یک شیء از نوع کلاس Literal قرار میگیره که این Literal در TableCell جای میگیره.
نکته ای که مهم هست اینه که اگر قصد داشته باشی که تنها یک سلول در ردیف داشته باشی و ردیف های دیگر GridView بیش از یک سلول داشته باشند، نیاز داری تا خاصیت ColumnSpan شیء ایجاد شده از کلاس TableCell رو برابر با تعداد سلول هایی که برای ردیف GridView تعیین کردی قرار بدی.

کد توضیحات فوق:


Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
If (e.Row.RowType = DataControlRowType.DataRow) AndAlso (e.Row.RowIndex = 19) Then
Dim T_CELL As New TableCell
Dim CTL_LITERAL As New Literal
Dim GV_ROW As New GridViewRow(0, 0, DataControlRowType.DataRow, DataControlRowState.Normal)
T_CELL.ColumnSpan = 4
CTL_LITERAL.Text = "<b>Hello World!</b>"
T_CELL.Controls.Add(CTL_LITERAL)
GV_ROW.Controls.Add(T_CELL)
e.Row.Parent.Controls.Add(GV_ROW)
End If
End Sub

موفق باشید.

پ.ن: این جواب رو قبل از اینکه لینک فوق رو بدی آماده کردم اما وقت برای ارسالش نشده بود. روش من ساده تر و بهتر هست.م

با سلام خدمات جناب راد
امکان داره آقای راد پروژه کد بالا رو به من بدید؟

Behrouz_Rad
یک شنبه 09 اردیبهشت 1386, 17:31 عصر
م

با سلام خدمات جناب راد
امکان داره آقای راد پروژه کد بالا رو به من بدید؟
کد پروژه؟:متفکر:
اونها توضیحاتی بودند که بنده در پاسخ به دوستمون عرض کردم.
اون تکه کد رو بنده برای درک بیشتر ایشون نوشتم. پروژه ای وجود نداره.

موفق باشید.:لبخندساده: