PDA

View Full Version : مشکل: جلوگیری از فراخوانی همیشگی ItemCommand در DataGrid



elham.net
یک شنبه 27 فروردین 1385, 11:47 صبح
من یک DataGrid دارم که 2 تا button داره.
1.more Details که به ItemCommand وصل می شه.
2.
Edit(upadte fires (updateCommand) , Cancel fires (CancelCommand)
اما هر کدوم از این 2 تا دکمه رو که کلیک می کنم ItemCommand اجرا می شه.
آیا راهی وجود داره که این اتفاق رخ نده

nazaninam
یک شنبه 27 فروردین 1385, 12:01 عصر
خوب مشخصه که Itemcommand زخ میده شما باید از یک شرط استفاده کنید...

Happy_davood
یک شنبه 27 فروردین 1385, 14:18 عصر
البته متن ناخوانا هست ببینید مشکل شما اینه ؟ شما می خواهید درصورت اینکه یکی از کلید ها کلیک بشه ItemCommand رخ بده ولی در کلید دیگه این اتفاق نیافته .
اگر منظورتون این باشه می تونید به وقفه کلید در سمت کلاینت یک سطر اضافه کنید تا در صورت کلیک صفحه رفرش نشه : onclick= "return false"
ولی در صورتیکه می خواهید صفحه رفرش بشه ، در سمت سرور از روی CommandName تشخیص بدید که ItemCommand در ازای کدام کلید رخ داده .

Behrouz_Rad
یک شنبه 27 فروردین 1385, 15:12 عصر
دوست عزیز!
در انتخاب عنوان تاپیک دقت کنید.
این بار عنوان تاپیک رو بنده تصحیح کردم اما در مراتب بعد، دقت بیشتری بفرمایید.
متشکرم.

elham.net
دوشنبه 28 فروردین 1385, 08:05 صبح
من واقعا متوجه نشدم که باید چیکار بکنم خواهش می کنم واضح تر جواب بدید!
در ضمن اینکه فکر می کنم سوال ابهام نداره.
ممنون!

Happy_davood
دوشنبه 28 فروردین 1385, 15:18 عصر
ببینید این به درد شما می خوره ؟
در گرید من دوتا ستون هست یکی برای نمایش اطلاعات کاربر و دیگری برای حذف اون .
در وقفه ItemDataBound :


((LinkButton)e.Item.FindControl("LinkbuttonDeleteMember")).Attributes.Add("onclick", "return confirm('Are You Sure ?');");

همونطور که می بینید برای تمام سطرهای گرید و به ستون حذف یک تابع جاوا اسکریپت قرار داده شده که هنگام کلیک رو کلید در هر سطر از گرید و در سمت کلایتن یک پنجره با عنوان اینکه آیا از حذف اطمینان دارید یا نه باز میشه که دوتا کلید بله و نخیر داره . اگر جواب خیر باشه تابع Confirm مقدار False برمی گردونه و صفحه رفرش نمیشه . در صورت اینکه بله فشار داده بشه یا کلید نمایش اطلاعات کاربر فشار داده بشه صفحه هم رفرش میشه و :


private void OnItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
switch(e.CommandName.ToString())
{
case "ShowMemberInfo":
// Show Member Info
break;
case "DeleteMember":
// Delete Member
break;
}
}

همانطوریکه می بینید در سمت سرور هم تفاوت بین کلید های مختلف روی گرید با اسم Command تشخیص داده میشه .

elham.net
سه شنبه 29 فروردین 1385, 11:23 صبح
الان متوجه منظورتون شدم.
ممنون

rahele_sa
پنج شنبه 04 خرداد 1385, 10:46 صبح
منم یه سوال راجب همین زمینه داشتم
می خواهم بدونم این دکمه ای که زده شده مربوط به کدام سطر از GridView بوده است

nazaninam
پنج شنبه 04 خرداد 1385, 12:03 عصر
یه شرط بگذارید که اگه command name فلان چیز بودن یه کاری انجام بده اگه نبود و چیز دیگه بود یک کار دیگه انجام بده...
فرض کنیم این دیتاگریدمون باشه....



<asp:datagrid id="mygrid" runat="server" AutoGenerateColumns="False" ShowHeader="False"CellPadding="0" CellSpacing="0" GridLines="None" OnItemCommand="buttonclick">
<Columns>
<asp:ButtonColumn Text="&Ecirc;&Ccedil;&iacute;&iacute;&Iuml;" ButtonType="PushButton" CommandName="yes"></asp:ButtonColumn>
<asp:ButtonColumn Text="&Ntilde;&Iuml;" ButtonType="PushButton" CommandName="no"></asp:ButtonColumn>
</Columns>
</asp:datagrid>



و این هم کد مربوط به رخ دادن itemcommand




Sub buttonclick(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)

Response.Write(e.CommandName)

End Sub



حالا میتونید هر بلایی سرش بیارید... اگه e.CommandName کلمه yes بود یا انیک no بود...
این کار رو میشد در رویداد datagrid itemcommand هم نوشت ولی اینم یه راه جالب بود.
توی 2005 هم میتونید از RowCommand استفاده کنید.