PDA

View Full Version : گرفتن کلید Gridview بعد از کلیک روی یک item template ?



elham1611
جمعه 24 شهریور 1391, 13:13 عصر
سلام
من gridview إارم که توش یک itemtemplate دارم از نوع hyperlink
حالا میخوام وقتی روی روی این itemtemplate کلیک میشه کلید سطری که روش کلیک شده رو بگیریم و مثلا داخل متغییری نگه دارم
چطوری میشه؟

meisam12
جمعه 24 شهریور 1391, 15:00 عصر
سلام
در hyperlink خاصیتی به نام CommandName دارد که شما می توانید یک نامی بدهید فرضاً CommandName="DoDelete" و یک خاصیت دیگر به نام CommandArgument دارد که به وسیله این خاصیت شما می توانید بفهمید که کدام سطر از گریدویو انتخاب شده است که شما می توانید id را بایند کنید بدینصورت که درhyperlink خاصیت CommandArgument در markup بنویسی فرضاً Eval("PersonID")

<asp:HyperLink ID="lbDelete" runat="server" CausesValidation="False"
CommandArgument='<%# Eval("PersonID") %>' CommandName="DoDelete">Delete</asp:HyperLink>

در رویداد RowCommand گریدویو یکی از پارامترهای آن e می باشد. از e.CommandArgument می توانید id را به دست آورید و بعد سرچ بزنید ازش استفاده کنید.
زمانی که روی hyperlink کلیک شد رویداد RowCommand گریدویواجرا می شود

EFEntities Context = new EFEntities();
protected void grdPeople_RowCommand(object sender, GridViewCommandEventArgs e)
{
switch (e.CommandName)
{
case "DoEdit":
{
int personid = Convert.ToInt32(e.CommandArgument);

var person = (from p in Context.People
where p.PersonID == personid
select p).FirstOrDefault();

txtPersonName.Text = person.PersonName;
txtPersonAge.Text = person.PersonAge.ToString();

ViewState["PersonID"] = personid;

break;
}
case "DoDelete":
{
int personid = Convert.ToInt32(e.CommandArgument);

(from i in Context.Incomes
where i.PersonID == personid
select i).ToList().ForEach(Context.DeleteObject);

(from p in Context.People
where p.PersonID == personid
select p).ToList().ForEach(Context.DeleteObject);

Context.SaveChanges();

grdPeople.DataBind();
break;
}
}
}

elham1611
جمعه 24 شهریور 1391, 16:54 عصر
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{

HyperLink mylink;
foreach (GridViewRow gvRow in GridView1.Rows)
{
mylink = (HyperLink)gvRow.FindControl("HyperLink_details");
mylink.Attributes.Add("onclick", "function({iframe:'d2.aspx?cm="+xxxxx+"'});return false");
}
}

خیلی ممنون.
ببینید من این تیکه کد بالا رو دارم که روی یک hyperlink اجرا میشه. یعنی وقتی کاربر روش کلیک میکنه یک پنجره جدید با استفاده از جاوااسکریپت باز میشه.
حالا من میخوام به جای عبارت xxxxx مقدار کلید سطر رو بگیرم. نمیدونم چه دستوری باید به جای xxx بنویسم

fakhravari
جمعه 24 شهریور 1391, 19:11 عصر
برسی نکردم اما باید e خودش کلید سطر بده
مثلا e.value همچین چیزی

meisam12
جمعه 24 شهریور 1391, 19:11 عصر
بنویسید

e.CommandArgument

elham1611
جمعه 24 شهریور 1391, 19:30 عصر
ممنون ولی بعد از e نه value رو قبول میکنه نه CommandArgument :متفکر:

fakhravari
جمعه 24 شهریور 1391, 19:47 عصر
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowcreated.aspx

meisam12
جمعه 24 شهریور 1391, 20:16 عصر
مگه در رویداد GridView1_RowCreated ننوشتید سورستون را.
اصلاً می شه سورستون را بنویسید تا ببینیم.

ممنون ولی بعد از e نه value رو قبول میکنه نه CommandArgument :متفکر: