• 1399/05/04

مشکل با datagrid :

سلام استاد

من دارم یه برنامه مینویسم برای شرکتمون که توش اطلاعات ارسالی یک سری دستگاه را نمایش بدهد. هر دستگاهی دیتای مختلفی در زمانهای مختلف میفرسته و قابل پیش بینی نیست که  کی چه دیتای میاد

این اطلاعات از طریق سریال بصورت رشته وارد میشن و من دیکدش میکنم و مثل این

Mode=0,Type=1=Input=2

بعد از دیکد و ریختن داخل table با در نظر گرفتن اینکه اسم ستونها را قبلش خودم میدونستم و گذاشتم این شکلی شده

که خب درسته همه چی

حالا میخوام این سطرهایی که هستن مثل mode-Type-Input اسم ستونها بشوند و هر 1 ثانیه یک بار که دیتای ورودی میاد یک سطر جدید تشکیل بشود و زیر هم نمایش داده شود که این هم نوشتم و Table به این شکل دراومده

حالا مشکلم اینه که وقتی این رو به datagrid بایند میکنم بهم این ارور رو میده

System.InvalidOperationException: 'An ItemsControl is inconsistent with its items source.
  See the inner exception for more information.'

این رو سرچ کردم دیدم برای حلش باید از observablecollection استفاده کنم دقیقا مثل چیزی که شما توی دوره درس داده بودید مثل این

observablecollection <Person> People;

و بعد کلاسی داشته باشم به این شکل که مثلا دوتا عضو داره

class Person
{
string name;
string family;
}

الان مشکل من اینه که من کلاسی نداره که بتونم همه اینکار هارو بکنم یعنی اینکه این عضوهای کلاس رو اصلا نمیدونم قراره این دستگاهی که الان وصل میشه و دیتا میفرسته چی قراره بفرسته فقط میتونم بگم همش string هست و اینکه مثلا امکان داره مثل عکس بالا یه موقع این 7 تا ستون باشه یه موقع 2 تا یه موقع 10 تا ولی وقتی برنامه شروع به کار کنه خودش اتوماتیک تشخیص میده این 5 تا ستون رو داریم و بعدش سطرهای Table رو براساس این 5 تا ستون پر میکنه

لطفا راهنمایی کنید که وقتی برنامه در حال اجراست چطور یک کلاس بسازم که عضوهاش متغیر باشه که بتونم ازش observablecollection  ازین بسازم یا اینکه یه روش دیگه برای حل ارور بهم بدید ممنون میشم

مرسی

  • 1399/05/05
  • ساعت 08:58

کاربرگرامی ! لطفا به پیام صوتی زیر گوش دهید.


  • 1399/05/11
  • ساعت 14:36

سلام استاد

وقتتون بخیر

من مشکلم بایند کردن دیتا گرید نیست چون از روی اموزشهاتون کاملا بلدم این کار رو انجام بدم و در چندین پروژه انجام دادم مشکلی هم نداشتم اما در اون پروژه ها من یک کلاس داشتم که کاملا مشخص بود چیه و از اون کلاس یک نمونه ساختم observablecollection   و بعد بقول شما  inotifypropertychanged رو هم فعال کردم

اما الان کلاسم که مشخص نیست چی باشه و از قبل نمیتونم معرفیش کنم یعنی زمان کامپایل مشخص نیست حتی مشص نیست بگیم این 5 نوع هست همه 5 نوع رو میسازیم امکان داره 50 نوع باشه اصلا امکان داره یک نوعی باشه که اصلا در نظر نگرفتیم

مثلا الان یک کلاسی هست که این اعضا رو باید داشته باشه

int Type
int Input
int Scale
float Calibration
string Name

یک دقیقه بعد دستگاه رو عوض میکنیم و بعد اعضا مشن اینا

String Location
float latitude
float longitude
string Barcode
int CounterBarcode
int Counter
int Key
int Timer

خب الان من سوالم اینه که چجوری یک کلاسی باید بسازم که اعضاش متغیر باشه که بتونم ازش نمونه observablecollection    بسازم؟

 


  • 1399/07/01
  • ساعت 00:17

سلام استاد ممنون میشم جواب بنده رو بدید من کاملا اطلاعات و مشکلم رو گفتم منتظر راهنماییتون هستم


  • 1399/07/12
  • ساعت 10:57

سلام

برای این کار به نظر بهتر باشه از نوع داینامیک dynamic استفاده کنید و مجموعه ای از dynamic ها داشته باشید فقط زمان تبدیل و cast کردن باید بررسی های لازم رو انجام بدید.

https://www.geeksforgeeks.org/dynamic-type-in-c-sharp/

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/using-type-dynamic


  • 1399/08/05
  • ساعت 12:41

ممنونم استاد مشکل داشتم باز پیام میدم


logo-samandehi