PDA

View Full Version : سوال: تعیین تابع رویداد کلیک برای دکمه های درون گرید



majid784
شنبه 09 مهر 1390, 16:31 عصر
سلام. من توی هر سطر از گریدویو یک دکمه گذاشتم. حالا اگه بخوام با کلیک اون دکمه تابعی اجرا بشه چیکار باید بکنم. چون اگه اگه در زمان طراحی گرید، وقتی در ItemTemplate اون button رو تعریف میکنیم اگه تابعی مانند Button1_Click را برای رویداد onClick دکمه تعریف کنیم و در کد پشت صحنه اون تابع رو به صورت زیر تعریف کنیم

protected void Join_Click(object sender, EventArgs e)

در هنگام اجرا وقتی روی دکمه کلیک میکنیم error میده

مهدی کرامتی
شنبه 09 مهر 1390, 16:35 عصر
شما نباید برای کنترل هایی که درون ItemTemplate (یا هر جور Template دیگری) قرار می دهی مستقیم کد OnClick و امثال هم بنویسی. بلکه میبایست به کنترل مورد نظر یک CommandName مناسب اختصاص بدی و در رویداد RowCommand کنترل بالایی (مانند GridView) رویداد را مدیریت کنی. برای دسترسی به مقادیر هر یک از ردیف ها به ازای رویداد فوق هم میتوانی از مشخصه CommandArgument دکمه و ... استفاده کنی.

majid784
شنبه 09 مهر 1390, 17:30 عصر
الان از این روش استفاده کردم ولی داره error میگیره. جایی اشتباه کردم؟

<ItemTemplate>
<asp:Button ID="joinButton" CommandName="JoinToGame" CommandArgument=<%# Eval("GameId") %> Text="Join" runat="server" CssClass="style14" />
</ItemTemplate>

protected void GamesGrid_RowCommand(object sender, GridViewCommandEventArgs e)
{
string currentCommand = e.CommandName;
long id = long.Parse(e.CommandArgument.ToString());
if (currentCommand == "JoinToGame")

Label1.Text = id.ToString();
}
}

Saman Hashemi
یک شنبه 10 مهر 1390, 09:14 صبح
چه اروری میده؟

majid784
یک شنبه 10 مهر 1390, 09:33 صبح
میگه :Invalid postback or callback argument.
من مقدار پارامتر CommandArgument را <%# Eval("GameId") %> قرار دادم که این فیلد کلید اصلی جدولیه که توی گریدویو داره نمایش داده میشه. البته وقتی اصلا از CommandArgument استفاده نکنم بازم همین ارور را میده

majid784
یک شنبه 10 مهر 1390, 10:02 صبح
به جای استفاده از <asp: button> در ItemTemplate از <asp:ButtonField> استفاده کردم. در این حالت خودش شماره سطر رو به عنوان CommandArgument درنظر میگیره. مشکلم حل شد. مقدار فیلد GameId رو هم توی کد برنامه بدست آوردم.