تصدير WPF DataGrid إلى ملف نصي بتنسيق جميل المظهر. يجب أن يكون الملف النصي سهل القراءة

StackOverflow https://stackoverflow.com/questions/3049887

سؤال

هل هناك طريقة بسيطة لتصدير DataGrid WPF إلى ملف نصي وملف .csv؟ لقد قمت ببعض البحث ولا يمكنني رؤية أن هناك طريقة بيانات بسيطة للقيام بذلك. لقد حصلت على شيء يعمل (بالكاد) من خلال الاستفادة من نظام DataGrid. في حالتي ، هذه مجموعة من الهياكل. أفعل شيئًا مع StreamWriters و StringBuilders (التفاصيل المتاحة) ولديهم بشكل أساسي:

StringBuilder destination = new StringBuilder();
destination.Append(row.CreationDate);
destination.Append(seperator);  // seperator is '\t' or ',' for csv file
destination.Append(row.ProcId);
destination.Append(seperator);
destination.Append(row.PartNumber);
destination.Append(seperator);

أفعل هذا لكل بنية في الصفيف (في حلقة). هذا يعمل بشكل جيد. المشكلة هي أنه ليس من السهل قراءة الملف النصي. يمكن أن تكون البيانات ذات أطوال مختلفة داخل نفس العمود. أود أن أرى شيئًا مثل: 2007-03-03 234238423823 823829923 2007-03-03 66 99 وبالطبع ، أحصل على شيء مثل: 2007-03-03 234238423823 82382923 2007-03 66 99

ليس من المستغرب أن أستخدم محددات Tab ، لكنني آمل أن أقوم بعمل أفضل. من السهل بالتأكيد قراءة DataGrid! بالطبع ، يمكن أن يكون لدي بعض المنطق لإسقاط القيم القصيرة مع المسافات ، لكن هذا يبدو فوضويًا تمامًا. اعتقدت أنه قد يكون هناك طريقة أفضل. لديّ أيضًا شعور بأن هذه مشكلة شائعة وربما تم حلها من قبل (نأمل ضمن فصول .NET نفسها).

شكرًا.

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

المحلول

أفترض أن الهدف هو أن تكون وايزويج قدر الإمكان. في هذه الحالة ، أود:

  1. حلقة من خلال جميع بيانات DataGridRows ، ولكل واحدة تقوم بإنشاء سلسلة [] تحتوي على البيانات المعروضة في كل dataGridCell. هذا سهل بالنسبة لمعظم أنواع DataGridColumn. بالنسبة إلى DataGridTemplateColumn ، ستحتاج إلى استخدام الربط ثم تحويل .ToString ().
  2. كما أنني سأتتبع الحد الأقصى لطول السلسلة في كل عمود كما فعلت.

تعتمد الخطوة التالية على نوع التصدير:

  • بالنسبة لتصدير CSV ، سأقوم بعد ذلك بإلحاق جميع الأوتار في كل سلسلة [] داخل الاقتباسات مع الفواصل بينهما واكتبها.
  • بالنسبة لتصدير النص العادي ، أود إلحاق جميع الأوتار في كل سلسلة [] مبطنة بمسافات إلى 1+ طول السلسلة القصوى لهذا العمود واكتبها.

سبب استخدام كائنات DataGridRow الفعلية و DataGridCell و DataGridColumn هو كتابة ما يراه المستخدم النهائي بالضبط. على سبيل المثال ، يمكنك تخطي الأعمدة المخفية ، وتطبيق تنسيقات السلسلة في الربط ، وتصفية الشرف/التجميع/الفرز ، إلخ.

نصائح أخرى

أود استخدام Application.Copy وظيفة الشبكة ، حدد كل ما ثم نسخه في التعليمات البرمجية ، ثم يمكنك تحليل بيانات مساعد الحافظة الموجود في CSV و HTML وبعض التنسيقات الأخرى.

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