أسماء أعمدة SharePoint list.items.GetDataTable لا تتطابق مع أسماء الحقول

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

  •  08-07-2019
  •  | 
  •  

سؤال

أقوم بربط SPGridView بقائمة SPList.كما تشير نماذج التعليمات البرمجية، فإنني أستخدم التعليمات البرمجية التالية لإنشاء عرض بيانات بناءً على القائمة.

dim data as DataView = myList.Items.GetDataTable.DefaultView
grid.DataSource = data
etc...

ما أجده هو أن أسماء الأعمدة في عرض البيانات الناتج لا تتطابق دائمًا مع حقول المصدر المحددة في قائمة SPList.على سبيل المثال لدي أعمدة مسماة

  • وصف
  • بلغ عن شيء
  • وضع تقرير

    تظهر هذه في عرض البيانات الناتج مع أسماء الأعمدة مثل

  • نوع التقرير0
  • حالة التقرير1

يقودني هذا إلى الاعتقاد بأن لدي أسماء حقول مكررة محددة، ولكن لا يبدو أن هذا هو الحال.

يبدو أنني أفتقد شيئًا أساسيًا هنا؟شكرًا.

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

المحلول

ال GetDataTable الطريقة هي إرجاع internalName (أو staticName - لا أستطيع أن أتذكر على وجه اليقين أي تمثيل للأعمدة، ولكنها في كثير من الأحيان متماثلة، بدلاً من Title التمثيل، وهو ما تراه في واجهة الويب.أعتقد GetDataTable يقوم باستعلام CAML تحت الأغطية، وعليك استخدام ذلك internalName للمراجع الميدانية في CAML.

هذا مدونة يتحدث عن ذلك بمزيد من التفصيل.

نصائح أخرى

لذلك قمت بنشر هذا الأمر على مدونتي، لكنني كتبت طريقة مساعدة صغيرة يمكنك استخدامها، مباشرة بعد حصولك على جدول البيانات، تقوم بشكل أساسي بإعادة تعيين أسماء الأعمدة في DataTable إلى أسمائها المألوفة.

DataTable table = list.GetItems(list.DefaultView).GetDataTable();
foreach(DataColumn column in table.Columns)
{
   column.ColumnName = list.Fields.GetFieldByInternalName(column.ColumnName).Title;
}

امل ان يساعد!

ما يمكنك فعله أيضًا (إذا كنت تستخدم .NET 3.5) هو استخدام نوع مجهول والربط به.إذا كنت تفعل هذا فقد ترغب في استخدام Linq DataSource أيضًا.لقد قمت بعمل تدوينة تشرح هذا الأمر هنا.

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