سلام وقت بخیر
دوستان من یک گرید ویو دارم که بعضی از ستون هاش رو از ی تیبل دیتابیس میخونه و من دو تا ستون به این گرید ویو اضافه کردم ی ستون از نوع تمپلیت که داخلش تکست باکس گذاشتم و ی ستون دیگه که لینک توش گذاشتم.میخوام موقعی که کاربر روی لینک کلیک میکنه id جدول به همراه متنی که داخل تکست باکس نوشته شده پاس داده بشه.id رو با evel پاس میدم ولی مقداره تکست باکس رو نمیتونم با eval پاس بدم و هیچ دسترسی ای به مقدارش تو بیهایند کد ندارم.
ممنون از راهنمایی دوستان
شما باید در رویداد RowCommand توسط متد FindControl تکس باکس رو پیدا کنید و مقدار مورد نظر را استخراج کنید
میشه بیشتر توضیح بدید؟
من این کد رو زدم تو رویداد که خیلی هم ساده هست فقط میخوام نمایش بده اون مقدار رو ولی وقتی تریس کردم اصلا روی این رویداد نرفت که مقدارش رو ببینم
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) { string sharh=FindControl("Text_sharh").ToString(); Label2.Text = sharh; }
id اون تکست باکس هم text_sharhهستش
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) { //Determine the RowIndex of the Row whose Button was clicked. int rowIndex = Convert.ToInt32(e.CommandArgument); //Reference the GridView Row. GridViewRow row = GridView1.Rows[rowIndex]; //Fetch value of Name. string name = (row.FindControl("txtName") as TextBox).Text; //Fetch value of Country string country = GridView1.Rows[rowIndex].Cells[1].Text; ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('Name: " + name + "\\nCountry: " + country + "');", true); }
مرسی از راهنماییتون ولی هنوز ی مشکلی دارم.تابع findcontrolکار نمیکنه.ینی به جای عبارت txtName که درون تابع قرار دادید من id تکس باکسی که داخل گرید ویو هست رو قرار دادم ولی متاسفانه null برمیگردونه.من مقدار اون تکست باکسی که درون گرید ویو هست رو میخوام ولی راه دسترسی بهش رو نمیدونم:(((((
کد به این شکله:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowCommand="GridView1_RowCommand"> <Columns> <asp:BoundField DataField="idkar" HeaderText="idkar" InsertVisible="False" ReadOnly="True" SortExpression="idkar" Visible="False" /> <asp:BoundField DataField="mozokar" HeaderText="عنوان کار" SortExpression="mozokar" /> <asp:BoundField DataField="mojry" HeaderText="مجری کار" SortExpression="mojry" /> <asp:BoundField DataField="olav" HeaderText="اولویت" SortExpression="olav" /> <asp:BoundField DataField="dtarif" HeaderText="تاریخ ثبت" SortExpression="dtarif" /> <asp:BoundField DataField="ttarif" HeaderText="زمان ثبت" SortExpression="ttarif" /> <asp:BoundField DataField="modat" HeaderText="زمان انجام کار" SortExpression="modat" /> <asp:BoundField DataField="tozih" HeaderText="جزئیات" SortExpression="tozih" /> <asp:TemplateField HeaderText="شرح کار" SortExpression="sharh"> <ItemTemplate> <asp:TextBox ID="Text_sharh" runat="server"></asp:TextBox> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="اعمال تغییرات"> <ItemTemplate> <asp:LinkButton ID="LinkButton1" runat="server" CommandName="dte">LinkButton</asp:LinkButton> <asp:LinkButton ID="LinkButton2" runat="server" CommandName="e" CommandArgument='<%# ((GridViewRow) Container).RowIndex %>'>Link</asp:LinkButton> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
کد رویداد هم به این صورته همونی که شما فرمودید:
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) { //Determine the RowIndex of the Row whose Button was clicked. int rowIndex = Convert.ToInt32(e.CommandArgument); if (e.CommandName == "e") { //Reference the GridView Row. GridViewRow row = GridView1.Rows[rowIndex]; //Fetch value of Name. string name = (row.FindControl("Text_sharh") as TextBox).Text; //Fetch value of Country string country = GridView1.Rows[rowIndex].Cells[8].Text; ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('Name: " + name + "\\nCountry: " + country + "');", true); } else if (e.CommandName == "dte") { Label2.Text = "del"; } }
مرسی از نمونه.منم همین کارو کردم که شما انجام دادید بخدا ولی وقتی کلیک میکنم به جای نمایش مقدار داخل تکست باکس هیچ مقداری نشون نمیده و موقع تریس هم اصلا پر نمیشه.اصن انگار نمیبینه.میشه ایراد کد من رو بگید بیزحمت؟
جنس ستون رو دقت کنید
مثل نمونه ایجاد کردید ؟
تیکه کد شما رو کپی کردم.قبلش هم همین کار شما رو انجام داده بودم.دقیقا همینه
<asp:TemplateField HeaderText="Name" ItemStyle-Width="150"> <ItemTemplate> <asp:TextBox ID="txtName" runat="server" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="اعمال تغییرات"> <ItemTemplate> <asp:LinkButton ID="LinkButton2" runat="server" CommandName="e" CommandArgument='<%# ((GridViewRow) Container).RowIndex %>'>Link</asp:LinkButton> </ItemTemplate> </asp:TemplateField>
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)