سلام
چه شرایطی ما رو مجبور میکنه که از Eval استفاده کنیم ؟
در واقع فقط شرطی که ندانید DataSource شما چی خواهد بود! ندانید از DataSet استفاده خواهید کرد یا DataReader یا و... !
یا اینکه بخواهید در هر شرایطی از مخلوطی از اینها استفاده کنید !!
در کل بعدی میدانم شرط "اجبار" اتفاق بیافتد.
=====
حقیقتش اصلاً فکر نمیکردم کسی به این جمله در این جای دورافتاده توجه کند.
دستور Eval بازدهی بالایی ندارد، این دستور مقدار String را برای مشخص کردن فیلد قبول میکند و نیاز دارد که آیتم های منبع اطلاعات برای طریقه تامین دیتای مرتبط با String اسکن شوند، این String شما میتوانید نام یک Property از منبع یا ایندس Default منبع باشد که در مورد دوم طبیعتاً در خود منبع هم جستجویی برای یافتن دیتای مورد نظر انجام خواهد شد.
مثلاً اگر منبع دیتای شما یک DataTable از DataSet باشد، هر سطر دیتای شما یک System.Data.DataRowView خواهد بود. (که خود System.Data.DataRowView هم به System.Data.DataRow اشاره خواهد کرد.)
نتیجتاً دستور ("Eval("filedname بعد از فرآیند آماده سازی اول دریافت حالت Default Property ارجاعات اینچنینی را به شی System.Data.DataRowView ارجاع میدهد تا آن هم به System.Data.DataRow ارجاع دهد و ایندکس فیلد مورد نظر پیدا شود.
اگر دیتاهای شما از نوع خواننده پرسرعت DataReader هم باشد، باز باید هزینه فرآینده آماده سازی اولیه را بپردازید تا نهایتاً دیتاهای شما به DataReader اصلی ارجاع داده شود.
اگر هم دیتای شما موارد فوق نباشد و کاملاً شخصی باشد، باز باید تمام Property های واجد شرایط (بدون پارامتر و قابل خواندن) جستجو و یافته شوند و تازه در این جستجو فیلدهای مستقیم جایی ندارد و فقط Property ها جستجو میشوند.
مثلاً فرض کنید من سطر اطلاعاتی شخصی زیر را ساخته ام و میخواهم آرایه ای از اینها را به عنوان منبع اطلاعات خوراک کنترلر کنم.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
با این دیتا فقط میتوان دستور ("Eval("BBB را صادر کرد و بدون Property راهی برای دسترسی به مقادیر AAA و CCC وجود ندارد، ضمن اینکه دسترسی به همان BBB هم فقط با جستجوی رشته متنی Property ها امکان پذیر میشود.
=====
اما راه حل بهتر.
مقدار Container.DataItem هموراه مستقیماً به شی آیتم جاری منبع اشاره میکند، یعنی اگر از DataSet استفاده میکنید یک شی System.Data.DataRowView خواهد بود و اگر از DataReader استفاده میکنید، خود DataReader (و نیز DataRecord) خواهد بود و برای اطلاعات خاص دستی و دلخواه هم به تک آیتم مورد نظر (مثلاً Class1) اشاره میکند.
در این روش چون به شی اصلی دسترسی مستقیم دارید میتوانید از تمام مامکانات شی اصلی استفاده کنید (دسترسی به متدها و ایندکس عددی فیلد و یا enum فیلدهای و نام فیلد و...)
نتیجتاً باید به نوع منبع اطلاعات اشراف داشته باشید و یک علمیات قالبریزی به شی مناسب انجام دهید
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اگر desinger بخواهد لطف کند در موارد مشخصی شده با فونت ایتالیک مقادیر مجاز را هم نشان خواهد داد.
=====
جمیعاً موفق باشید.