PDA

View Full Version : سوال: استفاده از id در gridview



sajadsobh
شنبه 23 آذر 1392, 14:44 عصر
سلام
خسته نباشید
اومدم تو یه فرم یه گریدویو گذاشتم و واسه ویرایش رکوردها اومدم select گریدویو رو فعال کردم که وقتی یه رکورد رو select میکنی داده ها توی تکست باکس هایی که تو همون فرم در نظر گرفتم میاره و می تونیم آپدیت رو انجام بدیم. حالا سوال اینجاست:
من خاصیت visible ستون ID رو توی گریدویو false کردم ولی الان به اون ID نیاز دارم اما وقتی از این کد استفاده میکنم نمیشه بهش دسترسی پیدا کرد

GridViewRow gr = GridView1.SelectedRow;
int id = gr.Cells[0].Text;
txtName.Text = gr.Cells[1].Text;

حالا چاره چیه؟!

Mohammad_dn
شنبه 23 آذر 1392, 17:50 عصر
خوب وقتی شما id یک رکورد رو واکشی نکردی نمیتونی به اون دسترسی داشته باشی

sajadsobh
شنبه 23 آذر 1392, 21:34 عصر
خوب وقتی شما id یک رکورد رو واکشی نکردی نمیتونی به اون دسترسی داشته باشی

منظور از واکشی چیه؟! خب من با select کردن اون ردیف اون رو واکشی میکنم دیگه!
فقط چون خاصیت visible رو واسه id روی false گذاشتم نمیشه بهش دسترسی داشته باشم.:ناراحت:

Mohammad_dn
شنبه 23 آذر 1392, 21:49 عصر
خوب وقتی شما اونو داخل گرید مخفی میکنی..انگار که وجود نداره(حداقل تا جایی که من میدونم...چون کد های html مربوطه هم تولید نمیشه)

Kamarian.Reza
شنبه 23 آذر 1392, 22:14 عصر
روش بهتر اینه که از رویداد RowCommand گرید استفاده کنی
برای این کار کافیه که در Grid‌یک Item Template ایجاد کرده و داخلش یک LinkButtom یا کنترل مشابهی بزاری و ID مربوطه رو Bound کنی

موقع ایجاد RowCommand ، می‌تونی ID مربوطه رو از e.CommandArgument بگیری

sajadsobh
شنبه 23 آذر 1392, 22:48 عصر
روش بهتر اینه که از رویداد RowCommand گرید استفاده کنی
برای این کار کافیه که در Grid‌یک Item Template ایجاد کرده و داخلش یک LinkButtom یا کنترل مشابهی بزاری و ID مربوطه رو Bound کنی

موقع ایجاد RowCommand ، می‌تونی ID مربوطه رو از e.CommandArgument بگیری

یه چیزایی در موردش search کردم ولی میشه یکم بیشتر توضیح بدی که بتونم انجام بدم. ممنون میشم.

Kamarian.Reza
شنبه 23 آذر 1392, 23:24 عصر
یه چیزایی در موردش search کردم ولی میشه یکم بیشتر توضیح بدی که بتونم انجام بدم. ممنون میشم.
خیلی سادست...
شما یه گرید داری که قراره با کلیک کردن روی هر ردیفش، ID اون ردیف رو داشته باشی که بتونی به اطلاعات اون ردیف درجایی دیگه دسترسی داشته باشی

یه مثال ساده :


<asp:TemplateField HeaderText="دستورات">
<ItemTemplate>
<asp:LinkButton ID="lbEdit" runat="server" CausesValidation="False"
CommandArgument='<%# Eval("UserID") %>' CommandName="DoEdit">ویرایش</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>

در قطعه کد فوق، در واقع یه ستون به گرید اضافه کردید و یه LinkButton هم داخلش گذاشتید
به مقادیر commandName ، CommandArgument‌ و Eval توجه داشته باش
حالا موقه کلیک کردن روی LinkButton هر ردیف از گرید، توی CodeBehind ، دستورات زیر رو دنبال کن


protected void grdUsers_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "DoEdit")
{
int UserID = Convert.ToInt32(e.CommandArgument);

DataRow drUser = DataAccessLayer.Users.SelectRow(UserID).Tables["Users"].Rows[0];

txtUsername.Text = drUser["Username"].ToString();
txtPassword.Text = drUser["Password"].ToString();
txtEmail.Text = drUser["Email"].ToString();

ViewState["EditMode"] = "Edit";
ViewState["UserID"] = UserID;

mvUsers.SetActiveView(vwEdit);
}
}


بازم مشکلی داشتید، همین جا یا به صورت خصوصی بگید
(تشکر یادتون نره)

sajadsobh
یک شنبه 24 آذر 1392, 00:16 صبح
خیلی سادست...
شما یه گرید داری که قراره با کلیک کردن روی هر ردیفش، ID اون ردیف رو داشته باشی که بتونی به اطلاعات اون ردیف درجایی دیگه دسترسی داشته باشی

یه مثال ساده :


<asp:TemplateField HeaderText="دستورات">
<ItemTemplate>
<asp:LinkButton ID="lbEdit" runat="server" CausesValidation="False"
CommandArgument='<%# Eval("UserID") %>' CommandName="DoEdit">ویرایش</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>

در قطعه کد فوق، در واقع یه ستون به گرید اضافه کردید و یه LinkButton هم داخلش گذاشتید
به مقادیر commandName ، CommandArgument‌ و Eval توجه داشته باش
حالا موقه کلیک کردن روی LinkButton هر ردیف از گرید، توی CodeBehind ، دستورات زیر رو دنبال کن


protected void grdUsers_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "DoEdit")
{
int UserID = Convert.ToInt32(e.CommandArgument);

DataRow drUser = DataAccessLayer.Users.SelectRow(UserID).Tables["Users"].Rows[0];

txtUsername.Text = drUser["Username"].ToString();
txtPassword.Text = drUser["Password"].ToString();
txtEmail.Text = drUser["Email"].ToString();

ViewState["EditMode"] = "Edit";
ViewState["UserID"] = UserID;

mvUsers.SetActiveView(vwEdit);
}
}


بازم مشکلی داشتید، همین جا یا به صورت خصوصی بگید
(تشکر یادتون نره)

ممنون از راهنماییت. حالا یه سوال دیگه؟!
من الان id رو دارم وقتی روی اون دکمه که گفتی کلیک میکنم id بدست میاد ولی gridview به حالت سلکت در نمیاد چرا؟! :لبخندساده:

Mohammad_dn
یک شنبه 24 آذر 1392, 00:26 صبح
حالا لازمه حتما id مخفی باشه؟

sajadsobh
یک شنبه 24 آذر 1392, 00:34 صبح
حالا لازمه حتما id مخفی باشه؟

لازمه که نه! ولی واسه اینکه جدول تر و تمیز باشه نمیخوام دیده بشه :لبخندساده:

Mohammad_dn
یک شنبه 24 آذر 1392, 00:58 صبح
خوب میتونی با آیتم تمپلت ترو تمیزش کنی

Kamarian.Reza
یک شنبه 24 آذر 1392, 08:58 صبح
ممنون از راهنماییت. حالا یه سوال دیگه؟!
من الان id رو دارم وقتی روی اون دکمه که گفتی کلیک میکنم id بدست میاد ولی gridview به حالت سلکت در نمیاد چرا؟! :لبخندساده:

وقتی از RowCommand استفاده می‌کنید، ID ردیف مربوطه رو با روشی که گفتم بدست میارید کافیه که با یک Store Procedure یا روشی مشابه، ردیف مربوطه رو از DataBase بخونی

sajadsobh
یک شنبه 24 آذر 1392, 11:56 صبح
وقتی از RowCommand استفاده می‌کنید، ID ردیف مربوطه رو با روشی که گفتم بدست میارید کافیه که با یک Store Procedure یا روشی مشابه، ردیف مربوطه رو از DataBase بخونی

اینو که میدونم. فقط میخواستم مثل حالتی در بیاد که رکور رو select میکنیم.
بازم ممنون. همینم خیلی کمکم کرد :چشمک: