PDA

View Full Version : متمایز شدن سطری که کاربر در دیتا گرید کلیک کرده است(رفرش نشدن دیتاگرید)



jannati
چهارشنبه 22 شهریور 1385, 12:47 عصر
به نام یکتا هستی بخش مهربان
با سلام به دوستان گرامی
راستش من یک دیتاگرید دارم که میخوام وقتی کاربر روی سطری کلیک کرد ،رنگ اون سطر عوض بشه تا کاربر بدونه کدوم سطر رو کلیک کرده.و وقتی با موس روی دیتاگرید حرکت میکنه یک نوار رنگی همراه موس روی سطرها حرکت میکنه ( دیتاگرید رنگ سطرهاش یک درمیان فرق میکنه )در Datagrid2_ItemDataBound از این کد استفاده میکنم:



if (e.Item.ItemType == ListItemType.Item | e.Item.ItemType == ListItemType.AlternatingItem)
{
e.Item.Attributes.Add("onmouseover", "this.style.backgroundColor='Silver'");
e.Item.Attributes.Add("onclick", "this.style.backgroundColor='yellow';");

}
if (e.Item.ItemType == ListItemType.Item)
{
e.Item.Attributes.Add("onmouseout", "this.style.backgroundColor='#DEDFDE'");
}
else
{
if(e.Item.ItemType != ListItemType.Header)
{

e.Item.Attributes.Add("onmouseout", "this.style.backgroundColor='#F5F5F5'");

}


حالا این کد مشکلش این بودکه وقتی یک سطر رو کلیک میکنم رنگ سطر زرد میشه.اما بلافاصله به علت رفرش شدن صفحه به حالت اولیه برمیگرده.به همین علت از آجاکس استفاده کردم و تصمیم گرفتم که یک تکس باکس مخفی در صفحه بگذارم که با کلیک روی هر سطر شماره اون سطر در تکس باکس ذخیره بشه و با مقایسه شماره سطر و تکس باکس مشخص بشه که رنگ این سطر باید چی باشه.مثلا اگر روی سطر 3 کلیک شد تکس باکس بشه 3 و اگر این دوتا مساوی بودند در رویدادهای onmouseout و onmouseover رنگ سطر همون زرد بمونه و تغییر نکنه به همین علت کد onclick رو به شکل زیر کردم:


e.Item.Attributes.Add("onclick", "this.style.backgroundColor='yellow';document.forms['Form1'].elements['txt'].value='" + e.Item.Cells[5].Text + "';");

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

Behrouz_Rad
چهارشنبه 22 شهریور 1385, 17:27 عصر
آخر دستورات جاوا اسکریپتت که مربوط به رویداد onclick هست، بنویس "return false"

موفق!

jannati
چهارشنبه 05 مهر 1385, 11:18 صبح
به نام خدای مهربان
جناب آقای راد من اینکار رو کردم و جواب نداد.بعد یک قسمت کدم را به شکل زیر تغییر دادم و جواب گرفتم:


e.Item.Attributes.Add("onmouseout", "if(document.forms['Form1'].elements['TextBox2'].value=='" + e.Item.Cells[0].Text + "'){this.style.backgroundColor='yellow';}else{this. style.backgroundColor='#F5F5F5'}");

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