Himalaya
چهارشنبه 28 مهر 1389, 21:53 عصر
سلام به همگی
دیدم تو یه تاپیک خانوم bahar... یه روش واسه پرینت گرفتن از المانهای صفحه گفتن ولی بعضی از بچه ها با ست کردن استایل روی خروجی مشکل دارن. گفتم این کنترل رو ایجاد کنم که یه قسمتی از اون مشکل رفع بشه و طرز استفاده هم راحتتر بشه، تنها کاری که شما باید انجام بدید اینه که فقط باید یه نمونه از این کامپوننت رو از تولباکس رو صفحه قرار بدبد و id کنترلی که میخواید ازش پرینت بگیرید رو تو پراپرتی های این کامپوننت ست کنید
تو این کنترل از jquery برای پرینت گرفتن استفاده کردم . خوب بریم سراغ چند تا نکته
واسه اینکه ظاهر پرینت دقیقا بشه همونی که میخواید >>>
نکته 1. همونطوری که میدونید ما استایل رو به 3 صورت میتونیم تعریف کنیم
الف. external که از طریق تگ link تو header به صفحه میشناسونیم. مثلا
<linkrel="Stylesheet"media="all"href="StyleSheet1.css"/>
ب. inline که به این صورت تو خود تگ تعریف میشه
<divstyle="background-color:Yellow;font-family:Tahoma;">
ج. حالت سوم که تو header تعریف میشه و به وسیله خصوصیت class یا cssClass به روی تگ مورد نظر اعمال میشه. اینطوری
<style>.myStyle { background-color:Blue; font-family:Tahoma; }</style>
<divclass="myStyle">...</div>
این کامپوننت قادره هر 3 نوع استایل رو تشخیص بده و اونا رو تو خروجی (preview و پرینت) اعمال کنه. مورد اول و دوم هیچ مشکلی ندارن ولی اگه خواستید از مورد سوم استفاده کنید و استایلتون رو پرینت تاثیر داشت حتما استایل مورد نظر رو تو یه استایل خارجی قرار بدید و اون رو از طریق تگ link به صفحه معرفی کنید (مشابه روش الف)
نکته 2. کنترلی که میخواید ازش پرینت بگیرید باید id اون کنترل رو تو خصوصیت ControlID این کامپوننت قرار بدید. هیچوقت کنترل مورد نظر برای پرینت رو به صورت مستقیم جهت پرینت گرفتن نفرستید. منظورم اینه که اون کنترل (یا کنترلها) رو که میخواید ازشون پرینت بگیرید داخل یه تگ div قرار بدید و به اون تگ دیو یه id بدید و این id رو برای پرینت گرفتن به کامپوننت معرفی کنید.
یه مثال میزنم تا مطلب روشن بشه
فرض کنید کنترلی که میخوایم ازش پرینت بگیریم یه گرید باشه که ظاهرش اینطوریه
پلاگین jquery برای پرینت به این صورت عمل میکنه >>>
یه صفحه وب میسازه به این صورت . اول استایلهایی که به صورت link تعریف شدن از header تشخیص میده و تو هدر صفحه جدید قرار میده (تو حالت popup این صفحه دیده میشه ولی تو iframe نه. ولی روال کار تو هر دو یکی هستش) بعد میاد تگ مربوط به id که برای پرینت بهش معرفی کردیم رو پیدا میکنه و از اون تگ فقط و فقط خصوصیات style , CssClass , Class رو تشخیص میده و تو body صفحه جدید یه تگ div ایجاد میکنه و این خصوصیات رو به اون نسبت میده . (دوباره تاکید میکنم که کنترلی که برای پرینت توسط id بهش معرفی میکنیم از تگ ابتداییش فقط و فقط خصوصیات style,cssClass,Class شناخته میشن). تگهای داخلی به هر صورتی میتونن باشن و مشکلی ندارن.
با این تفاسیر اگه id مربوط به گرید رو واسه پرینت به این کنترل معرفی کنیم ظاهر پرینت
و preview میشه این
که گفتم باید چیکارش کنیم (استفاده از یه تگ div که یه id داشته باشه (این تک میتونهstyle , CssClass , Class رو هم داشته باشه) و قرار دادن تمام المانهایی که میخوایم ازشون پرینت بگیریم داخل این تگ div و معرفی این id به کامپوننت جهت گرفتن پرینت. یعنی به جای اینکه id گرید زیر رو واسه پرینت بفرستید
<asp:GridViewID="GridView1"runat="server"BackColor="#F7F7F7"/>
............
</asp:GridView>
id تگ div زیر رو براش بفرستید
<divid="printID"class="myStyle"style="background-color:Blue;">
<asp:GridViewID="GridView1"runat="server"BackColor="#F7F7F7"/>
............
</asp:GridView>
</div>
بین این تگ div هر چی باشه ازش پرینت گرفته میشه (من اینجا فقط گرید رو قرار دادم. ممکنه 100 تا المان دیگه هم بین اون وجود داشته باشه)
اما نحوه استفاده از این کنترل. این کنترل رو به تولباکستون اضافه کنید. بعد یه نمونه از اون رو روی صفحه قرار بدید. (ترجیحا بالاتر از کنترلی که میخواید ازش پرینت گرفته بشه، یا بلافاصله بعد از تگ form) پراپرتی هاش میشه مثل این عکس
خوب تو قسمت ControlID باید ID کنترلی که میخواید ازش پرینت بگیرید رو قرار بدید. بقیه خصوصیات هم مشخصه .فقط اگه قسمت PrintMode برابر popup باشه پنجره preview باز میشه و اگه رو iframe باشه پنجره preview بازنمیشه و مستقیم پنجره پرینت باز میشه.
بعد یه دکمه میزارید رو صفحه و تو ایونت کلیک اون ، این خط رو قرار میدید
Print1.PrintControl();
یه پروژه هم ضمیمه کردم. اون رو هم ببینید. اینم یه عکس از پرینتی که توسط همین پروژه گرفتم.
دیتابیس : Access با 3 تا رکورد و استفاده از کنترل FormView جهت گرفتن اطلاعات هر دانشجو
ff3.5 -- Safari4 -- Avant11 -- Chrome3 -- Netscape Navigator 9 -- ie8
تو ie7 فقط حالت popup
printControl رو که دانلود کردید dll داخل اون رو تو پوشه bin از پروژه studentCart جایگزین کنید
دیدم تو یه تاپیک خانوم bahar... یه روش واسه پرینت گرفتن از المانهای صفحه گفتن ولی بعضی از بچه ها با ست کردن استایل روی خروجی مشکل دارن. گفتم این کنترل رو ایجاد کنم که یه قسمتی از اون مشکل رفع بشه و طرز استفاده هم راحتتر بشه، تنها کاری که شما باید انجام بدید اینه که فقط باید یه نمونه از این کامپوننت رو از تولباکس رو صفحه قرار بدبد و id کنترلی که میخواید ازش پرینت بگیرید رو تو پراپرتی های این کامپوننت ست کنید
تو این کنترل از jquery برای پرینت گرفتن استفاده کردم . خوب بریم سراغ چند تا نکته
واسه اینکه ظاهر پرینت دقیقا بشه همونی که میخواید >>>
نکته 1. همونطوری که میدونید ما استایل رو به 3 صورت میتونیم تعریف کنیم
الف. external که از طریق تگ link تو header به صفحه میشناسونیم. مثلا
<linkrel="Stylesheet"media="all"href="StyleSheet1.css"/>
ب. inline که به این صورت تو خود تگ تعریف میشه
<divstyle="background-color:Yellow;font-family:Tahoma;">
ج. حالت سوم که تو header تعریف میشه و به وسیله خصوصیت class یا cssClass به روی تگ مورد نظر اعمال میشه. اینطوری
<style>.myStyle { background-color:Blue; font-family:Tahoma; }</style>
<divclass="myStyle">...</div>
این کامپوننت قادره هر 3 نوع استایل رو تشخیص بده و اونا رو تو خروجی (preview و پرینت) اعمال کنه. مورد اول و دوم هیچ مشکلی ندارن ولی اگه خواستید از مورد سوم استفاده کنید و استایلتون رو پرینت تاثیر داشت حتما استایل مورد نظر رو تو یه استایل خارجی قرار بدید و اون رو از طریق تگ link به صفحه معرفی کنید (مشابه روش الف)
نکته 2. کنترلی که میخواید ازش پرینت بگیرید باید id اون کنترل رو تو خصوصیت ControlID این کامپوننت قرار بدید. هیچوقت کنترل مورد نظر برای پرینت رو به صورت مستقیم جهت پرینت گرفتن نفرستید. منظورم اینه که اون کنترل (یا کنترلها) رو که میخواید ازشون پرینت بگیرید داخل یه تگ div قرار بدید و به اون تگ دیو یه id بدید و این id رو برای پرینت گرفتن به کامپوننت معرفی کنید.
یه مثال میزنم تا مطلب روشن بشه
فرض کنید کنترلی که میخوایم ازش پرینت بگیریم یه گرید باشه که ظاهرش اینطوریه
پلاگین jquery برای پرینت به این صورت عمل میکنه >>>
یه صفحه وب میسازه به این صورت . اول استایلهایی که به صورت link تعریف شدن از header تشخیص میده و تو هدر صفحه جدید قرار میده (تو حالت popup این صفحه دیده میشه ولی تو iframe نه. ولی روال کار تو هر دو یکی هستش) بعد میاد تگ مربوط به id که برای پرینت بهش معرفی کردیم رو پیدا میکنه و از اون تگ فقط و فقط خصوصیات style , CssClass , Class رو تشخیص میده و تو body صفحه جدید یه تگ div ایجاد میکنه و این خصوصیات رو به اون نسبت میده . (دوباره تاکید میکنم که کنترلی که برای پرینت توسط id بهش معرفی میکنیم از تگ ابتداییش فقط و فقط خصوصیات style,cssClass,Class شناخته میشن). تگهای داخلی به هر صورتی میتونن باشن و مشکلی ندارن.
با این تفاسیر اگه id مربوط به گرید رو واسه پرینت به این کنترل معرفی کنیم ظاهر پرینت
و preview میشه این
که گفتم باید چیکارش کنیم (استفاده از یه تگ div که یه id داشته باشه (این تک میتونهstyle , CssClass , Class رو هم داشته باشه) و قرار دادن تمام المانهایی که میخوایم ازشون پرینت بگیریم داخل این تگ div و معرفی این id به کامپوننت جهت گرفتن پرینت. یعنی به جای اینکه id گرید زیر رو واسه پرینت بفرستید
<asp:GridViewID="GridView1"runat="server"BackColor="#F7F7F7"/>
............
</asp:GridView>
id تگ div زیر رو براش بفرستید
<divid="printID"class="myStyle"style="background-color:Blue;">
<asp:GridViewID="GridView1"runat="server"BackColor="#F7F7F7"/>
............
</asp:GridView>
</div>
بین این تگ div هر چی باشه ازش پرینت گرفته میشه (من اینجا فقط گرید رو قرار دادم. ممکنه 100 تا المان دیگه هم بین اون وجود داشته باشه)
اما نحوه استفاده از این کنترل. این کنترل رو به تولباکستون اضافه کنید. بعد یه نمونه از اون رو روی صفحه قرار بدید. (ترجیحا بالاتر از کنترلی که میخواید ازش پرینت گرفته بشه، یا بلافاصله بعد از تگ form) پراپرتی هاش میشه مثل این عکس
خوب تو قسمت ControlID باید ID کنترلی که میخواید ازش پرینت بگیرید رو قرار بدید. بقیه خصوصیات هم مشخصه .فقط اگه قسمت PrintMode برابر popup باشه پنجره preview باز میشه و اگه رو iframe باشه پنجره preview بازنمیشه و مستقیم پنجره پرینت باز میشه.
بعد یه دکمه میزارید رو صفحه و تو ایونت کلیک اون ، این خط رو قرار میدید
Print1.PrintControl();
یه پروژه هم ضمیمه کردم. اون رو هم ببینید. اینم یه عکس از پرینتی که توسط همین پروژه گرفتم.
دیتابیس : Access با 3 تا رکورد و استفاده از کنترل FormView جهت گرفتن اطلاعات هر دانشجو
ff3.5 -- Safari4 -- Avant11 -- Chrome3 -- Netscape Navigator 9 -- ie8
تو ie7 فقط حالت popup
printControl رو که دانلود کردید dll داخل اون رو تو پوشه bin از پروژه studentCart جایگزین کنید