الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

طباعة datagrid أو Panel

مغلق
بدأه ashrafweb في 3 أكتوبر 2005 · 11 رد · 2,288 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع
    Private Sub Btn_Print_Click(ByVal sender As System.Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles ImgBtn_Print.Click
        Dim stringWrite As New System.IO.StringWriter
        Dim htmlWrite As New System.Web.UI.HtmlTextWriter(stringWrite)
        Dim w As System.Web.UI.WebControls.Unit
        w.Pixel(400)
        DataGrid1.Width = w
        Dim scr As String = "<script>function window.onafterprint(){history.back(1);}</script>"

        htmlWrite.Write(scr)
        Dim str As String = "" '"<div align=center id=titl1><h3><Font face=Verdana>Your DataGrid:</font></h3></div>" 
        htmlWrite.Write(str)
        DataGrid1.RenderControl(htmlWrite)
        Dim strHTML As String = stringWrite.ToString()
        Response.Clear()
        ' you could send it to Excel, too.... 
        'Response.ContentType = "application/vnd.ms-excel" 

        Response.ContentType = "text/HTML"
        Response.Write(strHTML)
        Response.Write("<script>window.print();</script>")
        Response.End()

    End Sub

تم تعديل هذه المشاركة بواسطة ashrafweb في 3 أكتوبر 2005 في 11:11

::::التوقيع::::

موقع ممتاز

وان شاء الله يفيد الجميع

وشكرا

؟؟لماذا لا يصل الايميل المرسل من صفحتي الي الهوتميل؟؟

مستوي الجدية في المواضيع المطروحة

لا اله الا الله محمد رسول الله

#3

السلام عليكم

ان شاء ان جيد جدا بس اعطينا فرصة نجربة و الف بارك فيك

#4

جميل ،، شكراً لك أخي

Success Is A Journey Not A Destination

#5

السلام عليك و رحمة الله و بركاته ،

الأخ الكريم / ashrafweb ..

نشكرك على هذه الهدية ... و لكن هل هنالك من امكانية لشرح الكود ،

حتى يمكننا من التعديل عليه حسب احتياجاتنا ، أو حتى تطويره مستقبلاً.

، و لكم تحية تقدير.

#6

شكراا على طرحك للفكرة فهي قد تحل مشاكل العديد من الإخوة لكن دعني أوضح لك مثالا..

لنفرض انك تقوم ببرمجة صفحة بها فلتر للبيانات و بالأسفل Grid تقوم بعرض النتائج عند الضغط على زر البحث ماذا ستفعل؟

هل ستقوم بعمل CallBack للصفحة و تستخدم Response.Clear و Response.End و بينهما ال Grid من أجل طباعتها؟

أعقد أن العملية معقدة خاصة من حيث قراءة الكود و أنا أرى أنه من أجل تحسين الكود يمكن عمل زر للطباعة يقوم بإرسال ال Grid عند ضغط الزر لصفحة أخرى تسمى Print.aspx مثلا و هناك نقوم بجلب البيانات الموجودة داخل ال Grid و طبعا ستكون على شكل HTML Table كالتالي:

	function RenderReport()
		{
	document.getElementById('ReportContainer').innerHTML = window.opener.document.getElementById('ReportContainer').innerHTML;		

	window.print();
		}	
		</script>
		</head>
	<body MS_POSITIONING="GridLayout" onload="RenderReport()">
	</body>

طبعا في الكود السابق سيتم البحث عن العنصر ReportContainer و هو طبعا الداتا جريد و سيكون في الصفحة مستقلا و سيتم طباعته و من أجل هذه العملية يلزمنا عمل شيئين الأول هو عمل Custom Control على شكل حدث Event كالتالي :

[DefaultProperty("Text"), 
		ToolboxData("<{0}:ReportGrid runat=server></{0}:ReportGrid>")]
	public class ReportGrid : System.Web.UI.WebControls.DataGrid
	{

		public event GridRenderedEventHandler GridRendered;
		private StringBuilder sb; 

		public ReportdGrid()
		{
			this.sb = new StringBuilder();
		}
		public string HtmlOutput
		{
			get{return sb.ToString();}

		}
		protected override void Render(HtmlTextWriter writer)
		{
			HtmlTextWriter writer1 = new HtmlTextWriter(new StringWriter(this.sb));

			if (this.GridRendered != null)
			{	base.Render(writer1);
				this.GridRendered(this);
			}
			base.Render(writer);
		}

 }
	public delegate void GridRenderedEventHandler(ReportGrid sender);

والان أخر خطوة و هي صفحة التقرير الأولى و التي تحوي على الفلتر و الداتا جريد الأصلية حيث سنقوم بإضافة الحدث الموجود بال Custom Control السابقة كالتالي:

private void InitializeComponent()
{
this.reportGrid.GridRendered += new Thirsty.Controls.GridRenderedEventHandler(this.reportGrid_GridRendered);
}

يبدو أني زدت الأمور تعقيدا ولكن هي للمتقدمين و ستكون أسهل لهم و لقد وضعتها هنا بدل ان أضعها في موضوع جديد لان لها علاقة بنفس هذا الموضوع.

بخصوص العرض في ملف Excel أعتقد أن MIME Type يجب أن يكون على هذا النمط كما في المثال:

Response.Clear();
				Response.ContentType = "application/octet-stream";
				Response.AddHeader("Content-Disposition","attachment; filename=" + fileName);
Response.End();

و هذا الكود سيكون داخل حدث OnClick لزر نسميه مثلا ExcelPrint

من اجل فهم الكود لكي يصبح سهلا يجب المعرفة بشكل جيد بال Custom events و كيفية إستدعائها و بدون ذلك سنشعر أن الكود قمة في التعقيد مع أنه سهل

بالتوفيق

تم تعديل هذه المشاركة بواسطة محمد خليل أبو صلاح في 13 ديسمبر 2006 في 15:01

You can fly while you can touch the sky

#7

السلام عليكم و رحمة الله و بركاته ،،

لقد قرأت كود ashrafweb مرة أخرى ... لكي أحاول فك بعض علامات الاستفهام ..حيث لا يتوفر شرح لمحتويات الكود ..و لكن!!

:blink: عادت الخطوط للتشابك مرة أخرى ما أن قرأت كود الأستاذ / محمد خليل أبو صلاح .... :unsure:

يبدو أننا نحتاج للكثير كي نتعلمه ..

اشكر محمد خليل أبو صلاح على محاولته الطيبة لدفعنا للتطور .

، لكم تحية تقدير .

#8

انا فعلا حاولت فقط تشجيعكم على تطوير المهارات لأنه للأسف يكتفي الكل بتعلم التعامل مع الداتا بيز من خلال ال ADO.NET و قليل من الأدوات مثل ال DataGrid و أل Repeater ووووو و خلص!!!

بينما هناك عالم أخر رائع لكن يحتاج لجهد في البداية.

هناك الكثير من الأفكار التي ممكن أن تطرح للتداول بيننا لكي أوضح تلك الفكرة.. مثلا لنفرض أنه عندنا موقع يريد طرح الأخبار أو أسعار العملات من خلال مصدر للبيانات و المشكلة أنه طلب أن يتم فقط تحديث هذا الجزء كل دقيقة دون أن تتم مشاهدة تحديث للصفحة و إنما يتم فقط تحديد الجزء دون أن يشعر أحد.

أو:

لنفرض أن هناك جدول يرصد درجات الحرارة في 10 مدن كبرى و هذه المدن مرتبة تصاعديا حسب درجة الحرارة و الجدول عبارة عن عمود لأسماء المدن و عمود لدرجة الحرارة الخاصة بها و المطلوب أنه عند تغير درجات الحرارة بين الحين والاخر أن يتم إعادة ترتيب الجدول حسب درجات الحرارة في جميع المدن مع إضافة BackGround Color للمدينة التي حصل بها تغير في درجة الحرارةو التغيير يكون فقط في خلية العرض لدرجة الحرارة و كمثال أيضا أن يتم إضافة Style معين للمدن التي تغير ترتيبها على مستوى الصف row.

أرأيتم؟ هناك العديد و العديد من الأفكار غير التقليدية .. فكروا قليلا و سأزودكم بالمعلومات إن شاء الله كي تقوموا بعملها .. لكن شرطي الوحيد أن أقوم بأعطاء الفكرة و مراجع لانه ليس لدي الوقت أبدا :)

تحياتي لكم دوما

تم تعديل هذه المشاركة بواسطة محمد خليل أبو صلاح في 19 ديسمبر 2006 في 14:16

You can fly while you can touch the sky

#9

مشكور اخوي لكن بالنسبه ل GRidView هل ينفع معه هذا الكود

#11

مشكور أخونا محمد خليل أبو صلاح

وهذا ما تعودناه منك دائماً في الطليعة

وعطائك الكبير

تم تعديل هذه المشاركة بواسطة habeab في 4 فبراير 2007 في 17:53

اللهم صلي على محمد وعلى آله وصحابته أجميعن إلى يوم الدين

#12

أشكر الجميع على التفاعل والإفادة

::::التوقيع::::

موقع ممتاز

وان شاء الله يفيد الجميع

وشكرا

؟؟لماذا لا يصل الايميل المرسل من صفحتي الي الهوتميل؟؟

مستوي الجدية في المواضيع المطروحة

لا اله الا الله محمد رسول الله

هذا الموضوع مغلق.

مواضيع مشابهة