PDA

View Full Version : عدم تشخیص دو string مساوی در کد !!!



orca13
یک شنبه 20 بهمن 1392, 19:26 عصر
سلام!
من در یک حلقه یک رشته ورودی رو با ایتم های یک drop down list چک میکنم که همون مقداره رشته رو نشون بده، دیدم گزینه درست در drop down list انتخاب نمیشه، trace که کردم، دیدیم موقع چک کردن شرط، دو رشته مساوی هستند، اما شرط if اجرا نمیشه.

لازم به ذکره که رشته ها فارسی ها هستند.

چرا اینجوری هستش؟

- من از trim هم استفاده کردم.

kablayi
یک شنبه 20 بهمن 1392, 20:19 عصر
کد لطفا...!!!

meisam3322
یک شنبه 20 بهمن 1392, 20:52 عصر
مقدار value هر آیتم را مشخص کنید. اینطوری با انتخاب هر آیتم ، شما مقدار value اون رو بدست میارید.

orca13
یک شنبه 20 بهمن 1392, 20:59 عصر
int indx = 0;
foreach (var item in ddlCity.Items)
{
string s = item.ToString();
if (s == city)
break;
indx++;
}
city مقدار داره!

ضمنا یه مورد دیگه هم هست، الان که میخوام اطلاعات پروفایل رو آپدیت کنم، مقدار dro down list ها رو عوض میکنم، ثبت رو که میزنم، مقدارشون تو بانک تغییر نمیکنه! (بقیه موارد درسته)

orca13
یک شنبه 20 بهمن 1392, 21:01 عصر
مقدار value هر آیتم را مشخص کنید. اینطوری با انتخاب هر آیتم ، شما مقدار value اون رو بدست میارید.
خودمم میخواستم همین کارو بکنم، اگه چون واسه شهر و استان جدول جدا دارم و ... نمیشه.

orca13
دوشنبه 21 بهمن 1392, 14:52 عصر
دوستان کسی راهنمایی نداره؟

kablayi
دوشنبه 21 بهمن 1392, 17:58 عصر
حدسم اینه که میخواید یه مقدار رو در صورت وجود در لیست dropdownlist انتخاب کنید... درسته؟
پیشنهادم اینه که از For معمولی استفاده کنید تا بهتر روی ایندکس item مدیریت داشته باشید:


for (int i = 0; i < ddlCity.Items.Count; i++)
{
if (ddlCity.Items[i].Text == city)
{
ddlCity.SelectedIndex = i;
break;
}
}

orca13
سه شنبه 22 بهمن 1392, 11:18 صبح
آره، کاربر موقع ثبت نام شهر و استان رو انتخاب کرده و مقدارش تو بانک ذخیره شده. این کد ماله صفحه ویرایش اطلاعات هستش که میخوام شهر و استانی که کاربر انتخاب کرده، به صورت پیش فرض انتخاب شده باشه تو drop down list.
add watch کردم، مقداره متغیر ها دقیقا مساوی هستش، اما از if رد میشه!
حالا این کد شما رو هم تست میکنم.

راجع به مشکل دومم نظری ندارید؟

ضمنا یه مورد دیگه هم هست، الان که میخوام اطلاعات پروفایل رو آپدیت کنم، مقدار drop down list ها رو عوض میکنم، ثبت رو که میزنم، مقدارشون تو بانک تغییر نمیکنه! (بقیه موارد درسته)

kablayi
سه شنبه 22 بهمن 1392, 12:21 عصر
راجع به مشکل دومم نظری ندارید؟

تا کدهاتون نباشه نمیشه نظر داد... بازم حدسم اینه که ممکنه توی پیج لود dropdownlist ها رو پر میکنید و موقع postback شدن صفحه از اول پر میشن و مقدار اونا به حالت اول برمیگرده... معمولا این مشکل هست که باعث عوض نشدن مقادیر اونا موقغ ثبت اطلاعات میشه... راه حل هم اینه که از شرط (if(!ispostback توی page_load استفاده کنید... بازم میگم تا کدهاتون نباشه نمیشه قطعی نظر داد...

orca13
سه شنبه 22 بهمن 1392, 14:16 عصر
خب این مشکل دوم حل شد، ایراد تو کدم بود. ممنون (من از if(!ispostback استفاده کرده بودم، اما یه تابع رو بیرون از این بلاک صدا زده بودم)

اما اون مورد اول هنوز حل نشده متاسفانه.

demolition
سه شنبه 22 بهمن 1392, 17:58 عصر
اما اون مورد اول هنوز حل نشده متاسفانه.
دوست من اینجوری کسی نمیتونه کمکتون کنه شما باید مشخص کنید اطلاعاتو از چه طریقی واکشی میکنید dataset , datatable,datareader
کد واکشی رو بزارید . کدی که شما گذاشتید یه حلقست. اگه از dataset یا datatable استفاده میکنید اصلا نیاز به حلقه ندارید فقط کافیه از طریق کوئری آیدی اون رکوردو به دست بیارید و اطلاعاتو تو صفحه مورد نظر نشون بدید

orca13
سه شنبه 22 بهمن 1392, 20:34 عصر
من واسه شهر و استان دوتا جدول دارم، واسه اینکه با انتخاب استان، فقط شهرهای مربوزط به همون استان نمایش داده بشه.
با استفاده از SqlDataSource کاره ارتباط drop down list ها رو با بانک انجام دادم. واسه ذخیره که مشکلی ندارم. اما تو صفحه ویرایش اطلاعات که میخوام همون استان و شهره انتخابیه کاربر به عنوان گزینه پیش فرض نمایش داده بشه، با استفاده از همون foreach این کارو انجام میدم. (با همین کد، تاریخ تولد رو تنظیم میکنم و مشکلی نیست)
تو این صفحه هم با SqlDataSource کار ارتباط انجام میشه.
گفتم که تو trace میبینم که دقیق مثلا هردو خراسان رضوی هستند، اما شرط if اجرا نمیشه!

کلا هم از مهماری سه لایه استفاده کردم.

sasansara
چهارشنبه 23 بهمن 1392, 12:28 عصر
اگه تو رشته های فارسی که مقایسه میشن "ی" و "ک" وجود داشته باشه، احتمالا مشکل ازونجا هست. چون دو نوع ی و ک وجود داره، فارسی و عربی که در ظاهر تفاوتی با هم ندارن، ولی کدهاشون فرق داره و تو مقایسه، یکسان در نظر گرفته نمیشن.

مثلا: ی فارسی: 'ی' و ی عربی 'ي' هست

orca13
چهارشنبه 23 بهمن 1392, 16:59 عصر
خب راهه حلش چیه؟

sasansara
پنج شنبه 24 بهمن 1392, 07:28 صبح
راه حلش اینه که قبل از مقایسه ی و ک ها رو تبدیل کنید،اگه رشته موردنظر در متغیر data باشه:


data.Replace('ي', 'ی').Replace('ك', 'ک')

orca13
پنج شنبه 24 بهمن 1392, 07:51 صبح
آخه مقدار از بانک میاد تو drop down list ها و باز ذخیره میشه (هرکدوم رو کاربر انتخاب کنه) باز همین مقدار از بانک فراخوانی میشه. منظورم اینه که در طول پروسه ذخیره و ویرایش مقدار تغییر نمیکنه و اگه از نوع ی اولی باشه، همیشه همونه.

sasansara
پنج شنبه 24 بهمن 1392, 08:13 صبح
اگه منظورتون اینه که هر دو رشته ای که با هم مقایسه میشن از یه جا خونده میشن و 100 درصد یکسان هستن، خب پس مشکل این مورد نیست.

به طور کلی میگم، من هیچوقت از مقایسه رشته ای استفاده نمی کنم. مثلا وقتی می خوام dropdown رو پر کنم ، Text رو با رشته و Value رو با Id یا یک عدد پر می کنم و Value ها رو با هم مقایسه میکنم. همیشه مقایسه اعداد نتیجه صحیح تری میده