‫۱۲ سال و ۱ ماه قبل، دوشنبه ۲۰ شهریور ۱۳۹۱، ساعت ۰۵:۵۲
به این صورت قابل انجام است:
using System;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;

namespace iTextSharpTests
{
    public class PdfWriterPageEvents : PdfPageEventHelper
    {
        PdfContentByte _pdfContentByte;
        // عدد نهایی تعداد کل صفحات را در این قالب قرار خواهیم داد
        PdfTemplate _template;
        Font _font;
        public override void OnOpenDocument(PdfWriter writer, Document document)
        {
            FontFactory.Register(Environment.GetEnvironmentVariable("SystemRoot") + "\\fonts\\tahoma.ttf");
            _font = FontFactory.GetFont("Tahoma", BaseFont.IDENTITY_H, embedded: true, size: 9);
            _pdfContentByte = writer.DirectContent;
            _template = _pdfContentByte.CreateTemplate(50, 50);
        }

        public override void OnEndPage(PdfWriter writer, Document document)
        {
            base.OnEndPage(writer, document);

            var pageSize = document.PageSize;
            var text = "صفحه " + writer.PageNumber + " از ";
            var textLen = _font.BaseFont.GetWidthPoint(text, _font.Size);
            var center = (pageSize.Left + pageSize.Right) / 2;

            ColumnText.ShowTextAligned(
                _pdfContentByte,
                Element.ALIGN_RIGHT,
                new Phrase(text, _font),
                center,
                pageSize.GetBottom(25),
                0,
                PdfWriter.RUN_DIRECTION_RTL,
                0);

            //در پایان هر صفحه یک جای خالی را مخصوص تعداد کل صفحات رزرو خواهیم کرد
            _pdfContentByte.AddTemplate(_template, center - textLen, pageSize.GetBottom(25));
        }
        public override void OnCloseDocument(PdfWriter writer, Document document)
        {
            base.OnCloseDocument(writer, document);
            _template.BeginText();
            _template.SetFontAndSize(_font.BaseFont, _font.Size);
            _template.SetTextMatrix(0, 0);
            //درج تعداد کل صفحات در تمام قالب‌های اضافه شده
            _template.ShowText((writer.PageNumber - 1).ToString());
            _template.EndText();
        }
    }

    public class AddTotalNoPages
    {
        public static void CreateTestPdf()
        {
            using (var pdfDoc = new Document(PageSize.A4))
            {
                var pdfWriter = PdfWriter.GetInstance(pdfDoc, new FileStream("tpn.pdf", FileMode.Create));
                pdfWriter.PageEvent = new PdfWriterPageEvents();
                pdfDoc.Open();


                pdfDoc.Add(new Phrase("Page1"));
                pdfDoc.NewPage();
                pdfDoc.Add(new Phrase("Page2"));
                pdfDoc.NewPage();
                pdfDoc.Add(new Phrase("Page3"));
            }

            System.Diagnostics.Process.Start("tpn.pdf");
        }
    }
}

‫۱۲ سال و ۱ ماه قبل، دوشنبه ۲۰ شهریور ۱۳۹۱، ساعت ۰۴:۲۷
- تفاوت مهم آن در حجم کمتر است. jQuery-UI نسبتا حجم بالایی دارد و اگر صرفا قرار است پیام کوتاهی به کاربری نمایش داده شود، روش فوق حداقل از لحاظ حجم (11K) مقرون به صرفه‌تر است.
- استفاده از نتایج آن هم مطابق توضیحات مفصل مطلب جاری، در قسمت callback آن باید صورت گیرد. برای مثال

‫۱۲ سال و ۱ ماه قبل، دوشنبه ۲۰ شهریور ۱۳۹۱، ساعت ۰۱:۲۷
چندتا مطلب هست:
- احتمالا منظور شما از VB.NET همان WPF بوده و این بحث جاری هم سیلورلایت است. نسخه WPF این کنترل هم موجود است. باید سورس‌ها را دریافت کنید و کامپایل. مثال WPF هم دارد در سورس‌های مجموعه (در پوشه WpfPersianDatePickerUsage).
- خطایی که نوشتید مشکل VS.NET است که در دو جای مختلف به دنبال یک سری اسمبلی می‌گردد. در مسیر ProjectAssemblies\zgrq7cfx01 و در مسیر Common7\IDE. این تداخل رو می‌تونید با پاک کردن پوشه‌های obj و bin و مسیرهای یاد شده و بعد rebuild کامل پروژه احتمالا برطرف کنید. در کل مشکل کنترل دریافتی نیست. تداخل نگارش‌ها رخ داده روی سیستم شما.
- بله. مراجعه کنید به مثال موجود در پوشه WpfPersianDatePickerUsage. (سورس را باید دریافت کنید)
‫۱۲ سال و ۱ ماه قبل، یکشنبه ۱۹ شهریور ۱۳۹۱، ساعت ۱۸:۳۰
خیر. حداقل این مورد (بررسی ProductName با دو مقدار مختلف) در مثال‌های list1 تا list4 مطلب فوق بررسی شده (در متد RunQueries). لینک پروژه کامل هم در آخر مطلب قابل دریافت است.
+ مثال شما قابل بررسی و دیباگ نیست. لازم هست پروژه کامل باشد به همراه تعاریف تا بشود دید مشکل کار شما کجا است.
‫۱۲ سال و ۱ ماه قبل، یکشنبه ۱۹ شهریور ۱۳۹۱، ساعت ۱۶:۵۸
احتمال داره در حین نمایش گرید، lazy loading فعال است و به این ترتیب بدون اینکه متوجه باشید چند صد کوئری مجدد به بانک اطلاعاتی ارسال می‌شود. در این حالت کار نمایش بسیار کند خواهد بود. این مساله رو فقط با یک پروفایلر می‌شود تشخیص داد؛ که روش آن در مقاله ذکر شده قسمت 10 بررسی شده. همچنین مطلب کاهش مصرف حافظه را هم مدنظر داشته باشید.
‫۱۲ سال و ۱ ماه قبل، یکشنبه ۱۹ شهریور ۱۳۹۱، ساعت ۱۵:۲۷
- همین پیاده سازی فوق رو با یک برنامه کنسول ویندوزی هم تست کردم، کار می‌کنه. می‌خواهید یک امتحانی بکنید. به نظر در پشت صحنه به صورت خودکار به memory cache سوئیچ میشه. فقط باید ارجاعی را به اسمبلی System.Web اضافه کنید.
- ضمن اینکه در برنامه‌های دسکتاپ این مساله اهمیت آنچنانی نداره؛ چون سطح دوم کش بیشتر جهت ارائه محتوایی یکسان و با دسترسی عمومی، به کاربران همزمان سایت کاربرد داره. عمده اطلاعات برنامه‌های دسکتاپ با سطح دسترسی خصوصی و مخصوص به یک کاربر است؛ در یک چنین مواردی نباید از سطح دوم کش استفاده کرد وگرنه به مشکلات امنیتی و فاش سازی اطلاعاتی که نباید عمومی شوند، منتهی خواهد شد (البته اگر مثلا از یک وب سرویس استفاده شده باشه؛ اگر همه چیز لوکال است، این مساله صادق نخواهد بود؛ اما باز هم نیازی به سطح دوم کش نیست. چون مهم‌ترین هدف آن کاهش بار بانک اطلاعاتی، در مراجعات مکرر کاربران است؛ که در حالت لوکال آنچنان معنی ندارد).
‫۱۲ سال و ۱ ماه قبل، یکشنبه ۱۹ شهریور ۱۳۹۱، ساعت ۱۳:۴۳
یک gitignore مفید برای VS.NET:
#OS junk files
[Tt]humbs.db
*.DS_Store

#Visual Studio files
*.[Oo]bj
*.user
*.aps
*.pch
*.vspscc
*.vssscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.[Cc]ache
*.ilk
*.log
*.lib
*.sbr
*.sdf
*.opensdf
*.unsuccessfulbuild
ipch/
obj/
[Bb]in
[Dd]ebug*/
[Rr]elease*/
Ankh.NoLoad

#MonoDevelop
*.pidb
*.userprefs

#Tooling
_ReSharper*/
*.resharper
[Tt]est[Rr]esult*
*.sass-cache

#Project files
[Bb]uild/

#Subversion files
.svn

# Office Temp Files
~$*

#NuGet
packages/

#ncrunch
*ncrunch*
*crunch*.local.xml

# visual studio database projects
*.dbmdl

#Test files
*.testsettings