PDA

View Full Version : سوال: مشکل در شناختن آی دی کنترل ها در asp.net



sun2rise
جمعه 30 خرداد 1393, 08:51 صبح
من توی کنترل گریدویو تکست باکس گذاشتم که این کار باعث میشه تکست باکس تکرار بشه و به اندازه رکوردهای گریدویو تکست باکس تولید بشه این تکست باکس ها هموطنور که میدونید با آی دی های مختلف تولید میشه حالا من میخوام برای یکی از این تکست باکس ها یه پردازشی انجام بدم که آی دی تکست باکس مانند آی دی زی است
ctl04_GridView1_Text_3

حالا وقتی که برای همین آی دی میخوام پردازش بکنم asp.net این آی دی رو نمی شناسه و ارور میده
این آی دی ها زمانی ساخته میشوند که صفحه کاملا لود بشه برای همین هستش که ارور میده
حالا میخوام بدونم که آیا راهی داره که به این مشکل بر نخورد
لطفا راهنماییم کنید

aroshanzamir
جمعه 30 خرداد 1393, 09:27 صبح
شما می خواهید اطلاعات یک ردیف را پرداش کنید .. بعد از بدست آوردن شماره ردیف
تو همون ردیف FindControl بزن و Text را پیدا کن .. بگو در ردیف فلان و ستون فلان کنترلی از جنس TextBox

sun2rise
جمعه 30 خرداد 1393, 10:27 صبح
شما می خواهید اطلاعات یک ردیف را پرداش کنید .. بعد از بدست آوردن شماره ردیف
تو همون ردیف FindControl بزن و Text را پیدا کن .. بگو در ردیف فلان و ستون فلان کنترلی از جنس TextBox

خب همونطور که شما گفتید من بلد نیستم که این رو به کد های سی شارپ بفهمونم
لطفا اگه میشه نمونه کد برام بذارید تا بهتر متوجه بشم

aroshanzamir
جمعه 30 خرداد 1393, 17:32 عصر
سلام دوست من :

اگر اشتباه نکنم و منظور شما را درست فهمیده باشم می خواهید مقدار TextBox هر سطری را که انتخاب کردید بدست آوردید :
اوکی :

فقط اینو بگم من از اطلاعات ثابت استفاده کردم شما به پایگاه داده وصل شوید
کلاس دانشجو :


public partial class Student
{
public int Id { get; set; }
public string Name { get; set; }
public string Family { get; set; }
}



CSS های برای زیبای :


<style type="text/css" lang="en">
.main {
width: 800px;
height: auto;
margin: 0 auto;
}


.row {
width: 800px;
height: 30px;
background-color: #f8f8f8;
border-bottom: 1px solid #eee;
}


.field {
float: left;
width: 200px;
height: 30px;
line-height: 2.5em;
}


.link {
text-decoration: none;
font: normal 13px tahoma;
}
</style>



یک گرید به صفحه اضافه می کنم



<div class="main">
<asp:GridView ID="gridStudents" runat="server" SelectMethod="gridStudents_GetData"
ItemType="WebApplicationPost.Model.Student" AutoGenerateColumns="false" Caption="Students List" OnRowCommand="gridStudents_RowCommand" DataKeyNames="Id">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<div class="row">


<div class="field">
<asp:TextBox ID="txtName" runat="server" Text='<%# Item.Name %>'></asp:TextBox>
</div>
<div class="field">
<asp:TextBox ID="txtFamily" runat="server" Text='<%# Item.Family %>'></asp:TextBox>
</div>
<div class="field">
<asp:LinkButton ID="lbGetId" runat="server" CommandName="getData"
CommandArgument='<%# Container.DataItemIndex %>' Text="دستیابی به مقادیر این سطر"
CssClass="link"></asp:LinkButton>
</div>
</div>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>



جهت بدست آوردن اطلاعات هر سطر باید رویداد RowCommand را Raise کنید

در این رویداد Idex شماره سطر و Id ..Id رکورد انتخابی در پایگاه داده می باشد

این متد جهت پر کردن گرید :

public IEnumerable<Student> gridStudents_GetData()
{
return new List<Student>
{
new Student{ Id=1 , Name="Abolfazl" , Family="RoshanZamir"},
new Student { Id=2, Name="Zahra" , Family="Hasani"},
new Student{Id=3, Name="ANDY", Family="Madadian"},
new Student{ Id=4 , Name="Leila" , Family="Frouhar"}
};
}



در این رویداد مقادیر مورد نظر را بدست می آوریم :

protected void gridStudents_RowCommand(object sender, GridViewCommandEventArgs e)
{
//شماره سطر از 0 شروع می شود
int Idex = Convert.ToInt32(e.CommandArgument);
//گرفتن Id
//سطر انتخابی با استفاده از Idex
//همون Id که برای هر دانشجو در نظر گرفتیم می باشد
int Id = (int)gridStudents.DataKeys[Idex].Value;






string txtName = (gridStudents.Rows[Idex].Cells[0].FindControl("txtName") as TextBox).Text;
string txtFamilt = (gridStudents.Rows[Idex].Cells[1].FindControl("txtFamily") as TextBox).Text;
}



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