PDA

View Full Version : سوال: شماره رکورد در DataRow چیست؟



shocraneh
یک شنبه 15 اردیبهشت 1392, 18:03 عصر
باسلام
شماره رکوردی که آیدی مورد نظر را داراست،با چه کدی استخراج کنم؟

DataRow FindMyRow = DS.Tables[0].Rows.Find(id);
int rowID=FindMyRow .؟ ;

بعد از مقدار گرفتن FindMyRow اگه به قسمت Non_Public_memberبرید،توقسمت _rowID شماره رکوردجاری رو درست میزنه ،ولی نمیدونم چه طوری به اون مقدار دسترسی داشته باشم
ممنون

FastCode
یک شنبه 15 اردیبهشت 1392, 18:52 عصر
اگر قرار بود شما به اون متغیر دسترسی داشته باشید حتما public میگزاشتن.
وقتی که DataTable تغییرات commit نشده داره(Delete یا Detach) مقدار اون متغیر معتبر نیست.
اگر خیلی اصرار دارید که از همین _rowID استفاده کنید میتونید از reflection استفاده کنید.
جست و جو کنید
.net reflection private field
مشکل دیگه ای که این روش داره اینه که متغیر های private ممکنه بدون هشدار حذف بشن یا تغییر نام پیدا کنن.یا بعدا چند استفاده جدید پیدا کنن که در این مورد غیر طبیعی نیست.چون خیلی ها(فکر میکنم همین .net هم جزئشون باشه) این کار رو میکنند.(نمونش متغیر size_black در RBTree.cs در مونو)
از FindMyRow.Table.Rows.IndexOf(FindMyRow) هم میتونید استفاده کنید.(نمیدونم سرعتش چقدره.شاید توی تعداد بالا مناسب نباشه.)

shocraneh
یک شنبه 15 اردیبهشت 1392, 20:11 عصر
باتشکر
من از کدزیر استفاده کرده بودم ولی مقدارNULLبرمیگردونه(با rowID و_rowIDامتحان کردم)

System.Reflection.FieldInfo w = FindMyRow.GetType().GetField("rowID", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
var s= w.GetValue(FindMyRow);
نمیدونم مشکل کجاست؟
منظورتون از اینکه این متغیرها تغییر نام یاکاربرد پیدامیکنند،چیه؟ منظورتون توی نسخه های متفاوت نرم افزاراست؟

FastCode
یک شنبه 15 اردیبهشت 1392, 21:14 عصر
منظورتون از اینکه این متغیرها تغییر نام یاکاربرد پیدامیکنند،چیه؟ منظورتون توی نسخه های متفاوت نرم افزاراست؟
منظورم در نسخه های مختلف .Net Framework هست.ممکنه یا به روز رسانی های آینده نام این متغیر ها تغییر کنه و برنامه شما از کار بیافته.

باید از _rowID استفاده کنید.
فکر میکنم میتونم مشکلتون رو حدث بزنم.این لینک رو نگاه کنید:
http://stackoverflow.com/questions/6961781/reflecting-a-private-field-from-a-base-class