PDA

View Full Version : سوال: Select از طریق LinkButton( فوری)



saraytanha
چهارشنبه 19 خرداد 1389, 03:17 صبح
با سلام
من یه گرید دارم با TemplateField حالا می خواهم وقتی روی LinkButton کلیک می کنم
به یه صفحه دیگه بره
با شرط اینکه قبل از رفتن یکی از مقادیر سطر انتخاب شده گرید رو در متغیری بریزه
در واقع می خواهم خاصیت OnClick شی LinkButton کار Selected رو انجام بده
ممنون از کمکتون

hamedsabzian
چهارشنبه 19 خرداد 1389, 06:23 صبح
از رویداد RowCommand گریدویو استفاده کنید:

<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton runat="server" id="LBS" CommandName="CName" CommandArgument='<%#Container.DataItemIndex%' text="نمایش"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>

protected void GV_RowCommand(object sender, GridViewCommandEventArgs e)
{
int index=int.Pars((string)e.CommandArgument);
//شماره ستون کلیک شده index
//هر کاری می خواید انجام بدید
}


موفق باشید.

rana-writes
چهارشنبه 19 خرداد 1389, 12:07 عصر
سلام
منم همین سوال رو دارم
من یه LinkButton دارم که متنش تعداد نظرات هر پست رو نشون میده، میخوام با کلیک روی اون، برم به صفحه کامنتهام و البته شماره پست یعنی PostId رو هم از گرید بگیرم، نه شماره سطر
اما اول اینکه از خط اول این کد


int index=int.Pars((string)e.CommandArgument);

ایراد میگیره


int does not contain a definition for pars

بعد هم برای نوشتن OnClick لینک باتنی که انداختم، باید آرگومان دوم رو چطوری معرفی کنم ؟


protected void BtnShowCommnet(object sender, GridViewCommandEventArgs e)
{
Response.Redirect("Comment.aspx");
}

این آرگومان دومی که گذاشتم درسته؟ GridViewCommandEventArgs e
اما اصلا هیچ کاری انجام نمیده

ممنون از راهنماییتون

Vahid_moghaddam
چهارشنبه 19 خرداد 1389, 12:32 عصر
سلام
منم همین سوال رو دارم
من یه LinkButton دارم که متنش تعداد نظرات هر پست رو نشون میده، میخوام با کلیک روی اون، برم به صفحه کامنتهام و البته شماره پست یعنی PostId رو هم از گرید بگیرم، نه شماره سطر
اما اول اینکه از خط اول این کد


int index=int.Pars((string)e.CommandArgument);
ایراد میگیره


int does not contain a definition for pars
بعد هم برای نوشتن OnClick لینک باتنی که انداختم، باید آرگومان دوم رو چطوری معرفی کنم ؟


protectedvoid BtnShowCommnet(object sender, GridViewCommandEventArgs e)
{
Response.Redirect("Comment.aspx");
}
این آرگومان دومی که گذاشتم درسته؟ GridViewCommandEventArgs e
اما اصلا هیچ کاری انجام نمیده

ممنون از راهنماییتون

سوال اول: به این شکل اصلاح کنید:

Int32.Parse;

سوال دوم: از همون رویداد OnRowCommand استفاده کنید. به این شکل:
Command Argument رو اینطوری بنویسید:

CommandArgument=<%# Eval("PostID") %>



int id=Int32.Parse((string)e.CommandArgument);
Response.Redirect("Comment.aspx?id="+id);

rana-writes
چهارشنبه 19 خرداد 1389, 13:33 عصر
خیلی ممنون از راهنماییتون آقای مقدم
حالا من میخوام صفحه کامنتهام به شکل popup باز بشه و براش این کد رو نوشتم


int id = Int32.Parse((string)e.CommandArgument);
StringBuilder sb = new StringBuilder();
if (!ClientScript.IsClientScriptBlockRegistered("exampleScript"))
{
sb.Append("<script language='javascript' type='text/javascript'>");
sb.Append("window.open('Comment.aspx?id='"+id+",'','scrollbars=yes,toolbar=no,status=no,location= no,dir ectories=no,width=400,height=220,top=100,left=300' );");
sb.Append("</script>");
ClientScript.RegisterStartupScript(this.GetType(), "exampleScript", sb.ToString());
}

اما صفحه رو برام باز نمیکنه
یعنی اگه هیچ پارامتری رو بهش نفرستم باز میکنه و مشکلی نداره
اما وقتی میخوام همراه پارامتر postId فراخوانی بشه، اصلا کار نمیکنه
ممنون از راهنماییهای خوبتون:)

hamedsabzian
چهارشنبه 19 خرداد 1389, 13:38 عصر
Int32.Parse;
تشکر!


CommandArgument=<%# Eval("PostID") %>
به این دلیل این کار رو نکردم که ممکنه من چندین LinkButton داشته باشم که هر کدوم بر اساس پارامتر خاص کار خاصی انجام بدن. پس داشتن فقط شماره سطر به همراه CommandArgument که مشخص می کنه روی کدوم کلیک شده کافیه. با داشتن شماره سطر می تونید به تمام فیلد ها دسترسی داشته باشید و نیز DataKyes .
پس این روش عمومی تر و انعطاف پذیر تده!

Vahid_moghaddam
چهارشنبه 19 خرداد 1389, 13:41 عصر
خیلی ممنون از راهنماییتون آقای مقدم
حالا من میخوام صفحه کامنتهام به شکل popup باز بشه و براش این کد رو نوشتم


int id = Int32.Parse((string)e.CommandArgument);
StringBuilder sb = newStringBuilder();
if (!ClientScript.IsClientScriptBlockRegistered("exampleScript"))
{
sb.Append("<script language='javascript' type='text/javascript'>");
sb.Append("window.open('Comment.aspx?id='"+id+",'','scrollbars=yes,toolbar=no,status=no,location= no,dir ectories=no,width=400,height=220,top=100,left=300' );");
sb.Append("</script>");
ClientScript.RegisterStartupScript(this.GetType(), "exampleScript", sb.ToString());
}
اما صفحه رو برام باز نمیکنه
یعنی اگه هیچ پارامتری رو بهش نفرستم باز میکنه و مشکلی نداره
اما وقتی میخوام همراه پارامتر postId فراخوانی بشه، اصلا کار نمیکنه
ممنون از راهنماییهای خوبتون:)

خط bold شده رو در کدتون تصحیح کنید:


StringBuilder sb = newStringBuilder();
if (!ClientScript.IsClientScriptBlockRegistered("exampleScript"))
{
sb.Append("<script language='javascript' type='text/javascript'>");
sb.Append("window.open('Comment.aspx?id="+id+"','','scrollbars=yes,toolbar=no,status=no,location =no,dir ectories=no,width=400,height=220,top=100,left=300' );");
sb.Append("</script>");
ClientScript.RegisterStartupScript(this.GetType(), "exampleScript", sb.ToString());
}

Vahid_moghaddam
چهارشنبه 19 خرداد 1389, 13:43 عصر
تشکر!


به این دلیل این کار رو نکردم که ممکنه من چندین LinkButton داشته باشم که هر کدوم بر اساس پارامتر خاص کار خاصی انجام بدن. پس داشتن فقط شماره سطر به همراه CommandArgument که مشخص می کنه روی کدوم کلیک شده کافیه. با داشتن شماره سطر می تونید به تمام فیلد ها دسترسی داشته باشید و نیز DataKyes .
پس این روش عمومی تر و انعطاف پذیر تده!

حرف شما کاملا درسته. جوابی که من دادم در رد پست شما نبود.
شاد باشید.

rana-writes
چهارشنبه 19 خرداد 1389, 16:31 عصر
سلام
خیلی ممنون از راهنماییهاتون
برای این مورد، همون یک پارامتر کافی بود، با این حال به چند تا پارامتر هم نیاز داشتم که راهنمایی جناب
hamedsabzian خیلی مفید بود چون تو گریدهای دیگه م حتما بهش نیاز دارم

اگه اجازه بدین راه حل کار رو هم آخرش بذارم که اگه کسی این تاپیک رو خوند به جوابی برسه
لینک باتن های من، به یک پارامتر که اونهم PostID بود نیاز داشتند توی گرید ویو لینک باتن ها رو انداختم و TeplateField هام رو اینطوری تعریف کردم


<asp:TemplateField>
<ItemTemplate>
<asp:LinkButtonID="ShowEditPost"CommandName="ShowEditPost"runat="server"CommandArgument='<%# Eval("PostID") %>'Text="ویرایش پست"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="ShowComment" runat="server" CommandName="ShowComment" CommandArgument='<%# Eval("PostID") %>' Text='<%# Bind("SumComment") %>'></asp:LinkButton>
</ItemTemplate>


توی کد سی شارپم هم اینطوری نوشتم:


protectedvoid GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
int id = Int32.Parse((string)e.CommandArgument);
Session["PostID"] = id;
if (e.CommandName == "ShowEditPost")
{
Response.Redirect("CreatePost.aspx");

}
if (e.CommandName == "ShowComment")
{
StringBuilder sb = newStringBuilder();
if (!ClientScript.IsClientScriptBlockRegistered("exampleScript"))
{
sb.Append("<script language='javascript' type='text/javascript'>");
sb.Append("window.open('Comment.aspx','','scrollbars=yes,tool bar=no,status=no,location=no,dir ectories=no,width=400,height=220,top=100,left=300' );");
sb.Append("</script>");
ClientScript.RegisterStartupScript(this.GetType(), "exampleScript", sb.ToString());
}
}
}



پنجره کامنتهام رو میخواستم به شکل PopUp باز کنم، برای همین اینطوری فراخوانیش کردم و کامنتها و همینطور محتوایی که توی صفحه ویرایش میخواست بیاد رو با استفاده از Session(postId) فراخوانی کردم

موفق باشین