سؤال

أحتاج إلى إجراء تسلسل لتصميم التقرير.هذا هو السيناريو:

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

من المنطقي؟

هل كانت مفيدة؟

المحلول

وفيما يلي نسخة مبسطة من كيف أفعل هذا:

XtraReport customReport;
customReport = new MyXtraReport();
byte[] layout = LoadCustomLayoutFromDB();
if (layout != null) {
    using (System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(layout)) {
        customReport.LoadLayout(memoryStream);
    }
}

using (XRDesignFormEx designer = new XRDesignFormEx()) {
    MySaveCommandHandler customCommands = new MySaveCommandHandler(designer.DesignPanel);
    designer.DesignPanel.AddCommandHandler(customCommands);
    designer.OpenReport(customReport);
    designer.ShowDialog(this);
    if (customCommands.ChangesSaved)
        SaveCustomLayoutToDB(customCommands.Layout);
}

وداخل الطبقة MySaveCommandHandler:

public virtual void HandleCommand(ReportCommand command, object[] args, ref bool handled) {
    if (command != ReportCommand.SaveFileAs && command != ReportCommand.SaveFileAs)
        return;

    using (System.IO.MemoryStream memoryStream = new System.IO.MemoryStream()) {
        panel.Report.SaveLayout(memoryStream);
        this.layout = memoryStream.ToArray();
        changesSaved = true;
    }

    panel.ReportState = ReportState.Saved;
    handled = true;
}

نصائح أخرى

أعتقد أن ما تبحث عنه هو طريقة SaveLayout:

حفظ التقرير

YourReport report = new YourReport();

// Save the layout to a file.
report.SaveLayout(@"C:\YourReport.repx");

جارٍ تحميل التقرير

YourReport report = new YourReport();

// Load the layout
report.LoadLayout(@"C:\YourReport.repx");

يحرر:

هنا أ وصلة إلى موقع دعم devexpress لشرح كيفية حفظ تعريف التقرير.

يمكنك الحفظ/التحميل من وإلى التدفق باستخدام تجاوزات Save وLoadLayout.بالنسبة للمصمم، يمكنك إضافة معالج أوامر لاعتراض أمر الحفظ.

يجب أن تغطي هذه المقالات ما تحتاجه:

كيف:حفظ واستعادة تعريف التقرير من الدفق

كيف:تجاوز الأوامر في مصمم المستخدم النهائي (حفظ مخصص)

و للاكتمال: قائمة بجميع الطرق

يحرر:روابط ثابتة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top