PDA

View Full Version : سوال: Select کردن یک سطر از GridView با Click بر روی آن سطر



saghari
سه شنبه 11 اسفند 1388, 11:41 صبح
با سلام
میخواستم با کلیک روی هر کجای یک سطر از یک GridView او سطر Select بشه.

قبلا از توجه شما ممنونم

Mostafa_Dindar
سه شنبه 11 اسفند 1388, 11:58 صبح
با سلام
میخواستم با کلیک روی هر کجای یک سطر از یک GridView او سطر Select بشه.

قبلا از توجه شما ممنونم

سلام

يك CommandField به فيلدهاي گريدويو اضافه كنيد و مقدار SelectText رو مقدار دهيد . :لبخندساده:

saghari
سه شنبه 11 اسفند 1388, 12:36 عصر
ممنون از توجه شما ولی منظور من این نیست که کاربر روی دکمه Select در یک cell مشخص کلیک کنه تا سطر گرید انتخاب بشه. من میخوام کاربر روی هر Cell دلخواه در یک سطر کلیک کنه اون سطر select بشه.

Mostafa_Dindar
سه شنبه 11 اسفند 1388, 12:45 عصر
همچين ويژگي به صورت Built-In در ASP.NET وجود ندارد . بايد اينكار رو خودتون پياده سازي كنيد

در حالت معمولي ميتونيد از CommndField استفاده كنيد و يا از ButtonField ها استفاده كنيد و خاصيت CommanName اونها رو برابر "Select" قرار بديد . و در رويداد RowCommand از گريد ويو اون رو هندل كنيد

اينكه در هر جاي سطر كليك كنيد فكر ميكنم بايد با جاوا اسكريپت اون رو پياده سازي كنيد

ميتونيد از داونلود کد: اعمال متداول با GridView در ASP.NET 2.0 (http://barnamenevis.org/forum/showthread.php?t=50594) ‏استفاده كنيد تا شايد ايده اي به ذهن خودتون برسه .

موفق باشيد

saghari
سه شنبه 11 اسفند 1388, 13:39 عصر
دوست عزیز من در اینترنت یه همچین کدی پیدا کردم:


If e.Row.RowType = DataControlRowType.DataRow Then
For Each cell As TableCell In e.Row.Cells
cell.Style.Add(HtmlTextWriterStyle.Cursor, "pointer")
cell.Attributes.Add("title", "Select")
cell.Attributes.Add("onclick", Page.ClientScript.GetPostBackEventReference(Me, "Select$" & e.Row.RowIndex.ToString()))
Next
End If


اینم معادل C# اون:


if (e.Row.RowType == DataControlRowType.DataRow)
{
foreach (TableCell cell in e.Row.Cells)
{
cell.Attributes.Add("onclick",
Page.ClientScript.GetPostBackEventReference(this,
"Select$" + e.Row.RowIndex.ToString()));
cell.Style.Add(HtmlTextWriterStyle.Cursor, "pointer");
cell.Attributes.Add("title", "Select");
}
}


ولی وقتی این کد رو به RowCreated اضافه میکنم با کلیک فقط PostBack اتفاق میفته.
نمیدونم اصولا این کد صحیح است و اگه اینطوره چه تغییری باید بدم تا سطر کلیک شده رو Selectکنه

Mostafa_Dindar
سه شنبه 11 اسفند 1388, 13:51 عصر
دوست عزیز من در اینترنت یه همچین کدی پیدا کردم:
....
ولی وقتی این کد رو به RowCreated اضافه میکنم با کلیک فقط PostBack اتفاق میفته.
نمیدونم اصولا این کد صحیح است و اگه اینطوره چه تغییری باید بدم تا سطر کلیک شده رو Selectکنه

فكر ميكنم بايد به اين كد رو به رويداد Row_DataBound بايد اضافه كنيد .

دوست من پيشنهاد ميكنم "دنبال كد نگرديد " و همچنين اصطلاح " پيدا كردن كد " رو ديگه بكار نبريد .:چشمک:

اخيرا باب شده كه دوستان برنامه نويسمون در اين سايت صرفا دنبال كد ميگردند كه اصلا شايسته و در شان يك برنامه نويس نيست .

saghari
سه شنبه 11 اسفند 1388, 14:16 عصر
در Row_DataBound هم بذاری فرقی نمیگنه.

ضمنا من دنبال کد آماده نیستم (البته نظر شخصی خودم اینه که اگه مسئله ای قبلا توسط عزیزان به نتیجه رسیده با اجازه ایشان مشکلی در استفاده از اون نیست)
در این مورد هم العان 2 روزه دارم کار میکنم ولی متاسفانه به نتیجه نرسیدم و بهمین دلیل پست زدم تا در صورتیکه اساتید قبلا این مسئله رو حل کردن راهنمایی کنن.

بازم از توجه شما ممنونم

Mostafa_Dindar
سه شنبه 11 اسفند 1388, 14:26 عصر
خواهش ميكنم دوست عزيز .

انشاا... دوستان ديگه كمكتون ميكنند .

موفق باشي

پ.ن:
اينكه در رويداد Row_DataBaound بزاري رو شك ندارم . ولي در مورد خود كد نظري ندارم

saghari
سه شنبه 11 اسفند 1388, 14:44 عصر
خوب بالاخره اینجوری حلش کردم:
من یه CommandField به GridWiew اضافه کردم و خاصیت ShowSelectBotton اون رو True و خاصیت Visible رو False کردم و بعد از کد زیر در RowDataBound استفاده کردم :


e.Row.Attributes["onclick"] = ClientScript.GetPostBackClientHyperlink(this.GridV iew1, "Select$" + e.Row.RowIndex);

saghari
سه شنبه 11 اسفند 1388, 15:08 عصر
فقط یه مسئله:
برای اینکه روش بالا درست کار کنه باید EnableEventValidation را در Page برابر False قرار بدیم.
حالا یه سوال دارم. اگه اینکار رو یکنم از نظر امنیتی مشکلی نداره؟

iman_ad
سه شنبه 11 اسفند 1388, 15:50 عصر
چرا می تونه ضریب حمله xss بالا ببره

hamide_kh
پنج شنبه 13 اسفند 1388, 12:33 عصر
سلام خدمت شما دوست عزیز
من هم مشکل شما را داشتم که می خواستم با کلیک روی هر جای سطر در gridview اون سطر انتخاب بشه که با لینکی که یکی از دوستان برام در همین سایت گذاشت مشکلم حل شد و برای اون مشکل false کردن EnableEventValidation هم متد render را override کرده بود،اگه پیداش نکردی بگو لینکش را بذارم

اما حالا مشکل من اینه که من می خوام وقتی کرسر موس روی هر سطر اومد فقط کاربر بتونه کلیک کنه و نتونه متن نوشته شده در گرید ویو را انتخاب کنه برای حل این مشکل به نظر شا باید چه کار کنم؟

saghari
پنج شنبه 13 اسفند 1388, 13:54 عصر
سلام دوست عزیز
اون لینک رو بزاری که لطف فرمودی.
در مورد سوال شما هم اگه منظور شما اینه وقتی رو سطر کلیک میشه اون سطر رنگی بشه ولی عملا select نشه باید باید تو onclick که تعریف میکنی بجای postback رنگ background سطر رو عوض کنی.
این کار رو هم میتونی با جاوا اسکریپت انجام بدی هم با css
اگه منظورت همین بود و احیانا مشکلت حل نشد بگو تا نمونه کد برات بزارم.

موفق باشی

hamide_kh
پنج شنبه 13 اسفند 1388, 19:03 عصر
سلام

در مورد سوال شما هم اگه منظور شما اینه وقتی رو سطر کلیک میشه اون سطر رنگی بشه ولی عملا select نشه باید باید تو onclick که تعریف میکنی بجای postback رنگ background سطر رو عوض کنی

نخیر من می خوام اون سطر select بشه؟
ببنید در حالت معمولی وقتی با ماوس روی هر قسمت از سطر که نوشته داره میری حالت کرسر ماوس به حالتی تبدیل میشه که میشه اون متن را انتخاب کرد و با راست کلیک کپی کنیم اما من می خوام در هر جای سطر که میره اولا شکل کرسر ماوس به صورت لینک در بیاد و ثانیا یک حالت read only داشته باشه.
امیدوارم منظورم را رسانده باشم

و اما لینک که یکی از دوستان در همیک تاپیکهای جدید برام گذاشت:
http://www.codeproject.com/KB/webforms/DoubleClickGridviewRow.aspx

hamide_kh
جمعه 14 اسفند 1388, 22:17 عصر
سلام
از دوستان عزیز کسی نیست من را راهنمایی کنه

saranaseri
شنبه 15 اسفند 1388, 10:13 صبح
سلام

برای اینکه ردیفها انتخاب بشن و صفحه postback نشه»

ProtectedSub GridView1_RowDataBound(ByVal sender AsObject, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then


e.Row.Attributes.Add(
"onMouseOver", "this.style.cursor='hand';this.style.textDecoration ='underline';")

e.Row.Attributes.Add("onMouseOut", "this.style.textDecoration='none';")

e.Row.Attributes.Add("onclick", "onGridViewRowSelected(" & e.Row.RowIndex & ")")
end sub

hamide_kh
شنبه 15 اسفند 1388, 22:36 عصر
سلام خدمت دوستان عزيز
دوست عزيز saranaseri
من از کدي شکه شما قرار داديد استفاده کردم به جواب رسيدم.
فقط يک مشکل هست که هنوز GRID VIEW خاصيت READ ONLY نداره و ميشه سلول هاي اون را با ماوس انتخاب کرد و با راست کليک کپي کرد
به نظر شما براي اين مشکل چه بايد کرد؟

hamide_kh
دوشنبه 17 اسفند 1388, 17:36 عصر
سلام
از دوستان کسی بنده را راهنمایی نمی کنه

bachebahal_1363
دوشنبه 17 اسفند 1388, 22:25 عصر
برای این کار برای رویداد مربوط به oncontextmenu باید کد بنویسی

hamide_kh
چهارشنبه 19 اسفند 1388, 23:08 عصر
برای این کار برای رویداد مربوط به oncontextmenu باید کد بنویسی

سلام
میشه یکم بیشتر توضیح بدید،چون من همچین رویدادی برای GridView ندیدم

hamide_kh
جمعه 21 اسفند 1388, 19:17 عصر
سلام
آقا اگه ممکنه راهنماییم کنید کارم بدجوری گیره؟

Milad Mohseny
یک شنبه 23 اسفند 1388, 02:37 صبح
http://aspalliance.com/946_Extended_GridView_Control.all
http://authors.aspalliance.com/bhaidar/946.zip

mohsen_zelzela00
یک شنبه 23 اسفند 1388, 12:30 عصر
با سلام
میخواستم با کلیک روی هر کجای یک سطر از یک GridView او سطر Select بشه.

قبلا از توجه شما ممنونم

دوست عزیز به نتیجه رسیدید ؟؟؟ اگه بله ممنون میشم یه نمونه کد بزارید و توضیح بدید

Milad Mohseny
یک شنبه 23 اسفند 1388, 13:40 عصر
دوست عزیز به نتیجه رسیدید ؟؟؟ اگه بله ممنون میشم یه نمونه کد بزارید و توضیح بدید
من كه نمونه كد تو پست قبلي يعني تو 24 قرار دادم. :متعجب:

hamide_kh
دوشنبه 24 اسفند 1388, 20:37 عصر
دوست عزیز به نتیجه رسیدید ؟؟؟ اگه بله ممنون میشم یه نمونه کد بزارید و توضیح بدید
سلام بنده هم در پست 20 یک لینک گذاشتم که همین کار را انجام میده

mehdi.mousavi
دوشنبه 24 اسفند 1388, 21:14 عصر
برای اینکه روش بالا درست کار کنه باید EnableEventValidation را در Page برابر False قرار بدیم. حالا یه سوال دارم. اگه اینکار رو یکنم از نظر امنیتی مشکلی نداره؟

سلام.
فقط برای راحتی خوانندگان این تاپیک، لینک به پاسخ سوال فوق (http://barnamenevis.org/forum/showpost.php?p=927902&postcount=2) رو اینجا قرار میدم.

موفق باشید.

mehdi.mousavi
دوشنبه 24 اسفند 1388, 21:23 عصر
خوب بالاخره اینجوری حلش کردم:
من یه CommandField به GridWiew اضافه کردم و خاصیت ShowSelectBotton اون رو True و خاصیت Visible رو False کردم و بعد از کد زیر در RowDataBound استفاده کردم :


e.Row.Attributes["onclick"] = ClientScript.GetPostBackClientHyperlink(this.GridV iew1, "Select$" + e.Row.RowIndex);


سلام.
اگر چه این کد کار میکنه، اما خلاف unobtrusive javascript هستش. اینطور Mix & Match کردن HTML و JavaScript، نگهداری کد رو بشدت دشوار میکنه. روش پیشنهادی من، استفاده از JavaScript بدین منظور هستش.

پاورقی: شما از jQuery استفاده می کنید یا خیر؟ اگر اینکارو نمی کنید، تجدید نظر کنید.

hamide_kh
دوشنبه 24 اسفند 1388, 21:32 عصر
http://aspalliance.com/946_Extended_...ew_Control.all (http://aspalliance.com/946_Extended_GridView_Control.all)
http://authors.aspalliance.com/bhaidar/946.zip (http://authors.aspalliance.com/bhaidar/946.zip)

سلامی دوباره خدمت شما
من در برنامه ام تونستم دوبار کلیک و کلیک را پیاده کنم اما مشکلی که من فعلا دارم اینه که می خوام سطور گرید ویو حالت Read Only داشته باشه و کاربر نتونه با ماوس روی اون راست کلیک کنه و متون داخلش را انتخاب کنه
امیدوارم تونسه باشم منظورم را بهتون رسونده باشم

mehdima
سه شنبه 25 اسفند 1388, 01:24 صبح
با سلام

در رویداد Page_Load از این کد استفاده کنید.



GridView1.Attributes["oncontextmenu"] = "return false;";

if(Request.Browser.Browser=="IE")
GridView1.Attributes["onselectstart"] = "return false;";
else //because "onselectstart" isn't compatible with firefox
GridView1.Attributes["onmousedown"] = "return false;";