PDA

View Full Version : دسترسی به کنترل textbox در gridview



fereshte22
چهارشنبه 12 اردیبهشت 1386, 22:12 عصر
سلام
من یک textbox در gridview قرار داده ام.حالا میخواستم بدونم چطور میتوان با کلیک بر روی یک کنترل button که در خارج از gridview قرار دارد به مقدار textbox (و id رکورد متعلق به این textbox )دسترسی داشته باشیم.(vs2005)

Pioneers
پنج شنبه 13 اردیبهشت 1386, 12:22 عصر
از طریق یک حلقه for همه رکوردها را بررسی کنید.
foreach(gridviewrow xxx in yourgridvied.rows)
{
button x=(button)xxx.findcontrol("buttonname");
....
}
xxx دارای خواص زیادی است از جمله شماره سطر

fereshte22
پنج شنبه 13 اردیبهشت 1386, 13:24 عصر
سلام
دوست عزیز میشه این کدی که نوشتید را بیشتر توضیح بدهید.اگه یه مثال (که شامل textbox در gridview و یک کنترل button در خارج از gridview است )بزنید ممنون میشوم.

Alireza_Salehi
پنج شنبه 13 اردیبهشت 1386, 15:58 عصر
از طریق یک حلقه for همه رکوردها را بررسی کنید.
foreach(gridviewrow xxx in yourgridvied.rows)
{
button x=(button)xxx.findcontrol("buttonname");
....
}
xxx دارای خواص زیادی است از جمله شماره سطر
این کار لازم نیست !

با یک خط کد مستقیما به هر کنترلی که بخواهید دسترسی دارید:


Dim txt As Web.UI.WebControls.TextBox = GridView1.Rows(i).Cells(j).Controls.Item(k)

i شماره سطر
j شماره ستون
k شماره کنترل مورد نظر


این کد رو در رویداد کلیک دکمه بنویسید همین ، وقتی هم این خط اجرا بشه TextBox مورد نظر در txt قرار داره هر کار خواستید باهاش انجام بدید.

fereshte22
شنبه 15 اردیبهشت 1386, 08:34 صبح
با یک خط کد مستقیما به هر کنترلی که بخواهید دسترسی دارید:


Dim txt As Web.UI.WebControls.TextBox = GridView1.Rows(i).Cells(j).Controls.Item(k)

i شماره سطر
j شماره ستون
k شماره کنترل مورد نظر


این کد رو در رویداد کلیک دکمه بنویسید همین ، وقتی هم این خط اجرا بشه TextBox مورد نظر در txt قرار داره هر کار خواستید باهاش انجام بدید.
سلام
از راهنمایتون ممنون هستم.فقط من منظورتون را از شماره کنترل مورد نظر متوجه نشدم.مثلا من یک textbox به صورت زیر در gridview قرار داده ام.حالا نمیدونم شماره کنترل را چند قرار دهم.



<asp:GridViewID="GridView1"runat="server"AutoGenerateColumns="False">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:TextBoxID="textbox1"runat="server"Text='<%#Eval("n")%>'Width="90"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:ImageButtonID="ImageButton2"runat="server"ImageUrl="~/images/£ ¢ «هں©¬.gif"/>&nbsp;<asp:TextBox


درضمن وقتی به جای سطر و ستون مثلا در این مثال صفر قرار میدهیم.ایا مقدار کنترل textbox در همه سطر ها قابل دستیابی است؟

Alireza_Salehi
شنبه 15 اردیبهشت 1386, 09:49 صبح
با یک حلقه محتویات GridView1.Rows(i).Cells(j).Controls رو استخراج کنید و کنترل های داخلش رو ببینید معمولا اندیس 0 و 2 literal هستند و textbox در اندیس 1، اگر چیز اضافه تری نگذاشته باشید عدد یک جواب شماست.

fereshte22
شنبه 15 اردیبهشت 1386, 10:52 صبح
با یک حلقه محتویات GridView1.Rows(i).Cells(j).Controls رو استخراج کنید و کنترل های داخلش رو ببینید معمولا اندیس 0 و 2 literal هستند و textbox در اندیس 1، اگر چیز اضافه تری نگذاشته باشید عدد یک جواب شماست.

ببخشید میشه بپرسم این حلقه را چطور باید بنویسم.؟یعنی باید یک مقدار برگردوند؟
اگه کدش را بنویسید خیلی ممنون میشوم.

Alireza_Salehi
شنبه 15 اردیبهشت 1386, 11:00 صبح
ببخشید میشه بپرسم این حلقه را چطور باید بنویسم.؟یعنی باید یک مقدار برگردوند؟
اگه کدش را بنویسید خیلی ممنون میشوم.

برای درک موضوع گفتم لازم نیست این حلقه در برنامه وجود داشته باشه ،یک بار آزمایشی این کد را بنویسید وقتی اندیسش رو پیدا کردید این کد رو پاک کنید!


ProtectedSub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim s AsString = ""
For i As Integer = 0 To GridView1.Rows(0).Cells(2).Controls.Count - 1
s += i.ToString() + " " + GridView1.Rows(0).Cells(2).Controls(i).GetType().T oString() + "<br/>"
Next
Response.Write(s)
EndSub

Pioneers
یک شنبه 16 اردیبهشت 1386, 00:42 صبح
وقتی قراره از حلقه استفاده بشه کد من بهـــــــــــــــــــــــ ــــــــتره! چون نیازی به اندیس کنترل نداره. البته C# نوشتم.

Alireza_Salehi
یک شنبه 16 اردیبهشت 1386, 07:24 صبح
وقتی قراره از حلقه استفاده بشه کد من بهـــــــــــــــــــــــ ــــــــتره!
قرار نیست از حلقه استفاده بشه!

برای درک موضوع گفتم لازم نیست این حلقه در برنامه وجود داشته باشه ....



چون نیازی به اندیس کنترل نداره
حالا اگر مثلا 60 تا کنترل توی هر ردیف باشه 59 تا شرط بی خود باید چک بشه ، که اصلا بهینه نیست!



البته C# نوشتم.
این مسئله ربطی به زبان نداره در هر حال وقتی با یک خط جواب حاصل میشه نیازی به کار های اضافی نیست!

fereshte22
یک شنبه 16 اردیبهشت 1386, 09:56 صبح
سلام
ببینید من میخواهم وقتی مقدار textbox ها در گرید ویو را تغییر میدهم به این مقدار جدید دسترسی داشته باشته باشم.ولی کد زیر


Dim txt As Web.UI.WebControls.TextBox = GridView1.Rows(i).Cells(j).Controls.Item(1)

فقط همون مقدار اولیه textbox را بر میگردونه.
حالا سوالم اینه که چطوری به این مقدار جدید هم دسترسی داشته باشیم؟
چه شرطی باید قرار دهیم که به textbox های همه سطرها دسترسی داشته باشیم.؟
منظورم اینه که سطر خاصی را مشخص نکنیم.البته حتما با حلقه است ولی من وقتی از یک حلقه مثل زیر استفاده میکنم فقط مقدار textbox سطر اخری نمایش داده میشود


Dim i As Integer
For i = 0 To GridView1.Rows.Count - 1
Dim txt As Web.UI.WebControls.TextBox = GridView1.Rows(i).Cells(0).Controls.Item(1)
TextBox4.Text = txt.Text
Next i
End Sub

Alireza_Salehi
یک شنبه 16 اردیبهشت 1386, 10:55 صبح
1. شما داستان PostBack رو میدونید؟
حتما در رویداد Page_Load گریدویو رو Bind کردید، بنابراین هر بار که دکمه زده میشه مقادیر از اول در گرید ویو پر می شوند و با توجه به این که اول رویداد های صفحه عمل میکنه بعد مال کنترل ها شما مقادیر قبلی رو دریافت میکنید!


Protected Sub Page_Load(ByVal sender AsObject, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
' binding code
End If
End Sub


2. TextBox4.Text += txt.Text

fereshte22
دوشنبه 17 اردیبهشت 1386, 17:15 عصر
دوست عزیز از راهنمایهاتون ممنوم هستم .مشکلم حل شد