PDA

View Full Version : update کردن یک رکورد از gridview



mohsen_zelzela00
سه شنبه 17 آذر 1388, 18:23 عصر
با سلام

من یک gridview طراحی کردم به صورت زیر
http://barnamenevis.org/forum/attachment.php?attachmentid=40896&d=1260285339
حالا می خوام وقتی که بر روی یک رکورد آن کلیک کردم (یا بهتر اینه که یک دکمه بزارم) اطلاعات اون رکورد در textbox های که در پایین gridview هست به نمایش در بیات تا من بتونم که عمل update رو انجام بدم

ممنون میشم دوستان کمک کنند

raziee
سه شنبه 17 آذر 1388, 21:38 عصر
در رویداد SelectedIndexChanged به این روش کد نویسی کن:
فرضا در این گرید یک لیبل به نام lblName داری این کد رو مینویسی:
Label name = (Label)GridView1.SelectedRow.FindControl("lblName");
txtName.Text = name.Text;
و یا اگه از Template استفاده نکردی میتونی:
TextBox1.text = GridView1.SelectedRow.Cells[0].Text;
که شماره ای که در Cell قرار میگیره شماره ستون هست.

mohsen_zelzela00
چهارشنبه 18 آذر 1388, 16:00 عصر
در رویداد SelectedIndexChanged به این روش کد نویسی کن:
فرضا در این گرید یک لیبل به نام lblName داری این کد رو مینویسی:
Label name = (Label)GridView1.SelectedRow.FindControl("lblName");
txtName.Text = name.Text;
و یا اگه از Template استفاده نکردی میتونی:
TextBox1.text = GridView1.SelectedRow.Cells[0].Text;
که شماره ای که در Cell قرار میگیره شماره ستون هست.


دوست عزيز كد هاي html مربوط به gridviewمن به صورت زير است




<asp:GridView ID="GridView1" runat="server" Width="100%" ShowFooter="true" BorderColor="White" AutoGenerateColumns="false"
BorderStyle="Ridge" CellSpacing="1" BorderWidth="2px" BackColor="White" CellPadding="3" GridLines="None" Font-Names="Tahoma"
Font-Size="11px" >

<FooterStyle BackColor="C#‎6c3c6" ForeColor="Black" />
<RowStyle BackColor="#DEDFDE" ForeColor="Black" />
<SelectedRowStyle BackColor="#9471DE" Font-Bold="true" ForeColor="White" />
<PagerStyle BackColor="C#‎6c3c6" ForeColor="Black" HorizontalAlign="Right" />
<HeaderStyle BackColor="#4A3C8C" Font-Bold="true" ForeColor="#E7E7FF" />
<Columns>
<asp:TemplateField HeaderText="¬êں©ى<br/>©§يه" ItemStyle-HorizontalAlign="Center" FooterStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:Literal ID="litRowNumberNormal" runat="server"></asp:Literal>

</ItemTemplate>

<FooterTemplate>
<asp:Literal ID="litRowNumberFooter" runat="server"></asp:Literal>

</FooterTemplate>

</asp:TemplateField>
<asp:TemplateField HeaderText="ëںê ں§ں©ى">
<ItemTemplate>
<%#Eval("id")%>
</ItemTemplate>

</asp:TemplateField>
<asp:TemplateField HeaderText="ëںê çلمى">
<ItemTemplate>
<%#Eval("Name")%>
<div style="display: none">
<!-- For Menu -->

</div>
</ItemTemplate>

</asp:TemplateField>

<asp:TemplateField HeaderText="ê§é çلمى">
<ItemTemplate>
<%#Eval("Family")%>
</ItemTemplate>
</asp:TemplateField>

<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="btndelete" runat="server" Text="¥¨ه" CommandName="btndelete"/>

</ItemTemplate>

</asp:TemplateField>

</Columns>

</asp:GridView>




حالا من از Template استفاده كردم ولي خب label استفاده نكردم حالا چطوري از label در Template استفاده كنم


ممنون ميشم كمك كنيد به خدا كارم خيلي گيره

bahar_engineer
چهارشنبه 18 آذر 1388, 16:27 عصر
همون id رکورد رو که قبلا به دست آوردی رو در نظر بگیر

اگه خواستی دکمه بذاری که توی رویداد کلیک دکمه و اگه دکمه نذاشتی توی رویداد selectedindexchanged گریدویو به شکل زیر می نویسی : (من با یه دستورات فرضی می نویسم تو بانک خودم)



if (!IsPostBack)
{
w = "Provider=microsoft.jet.oleDb.4.0;Data Source=" + Server.MapPath("shop.mdb");
OleDbConnection con = new OleDbConnection(w);

s = "select * from MyProducts where ProductID='" + ID + "'";
OleDbCommand cmd = new OleDbCommand(s, con);
OleDbDataReader dr;

con.Open();
dr = cmd.ExecuteReader();
dr.Read();
TextBox1.Text = dr["ProductName"].ToString();
TextBox2.Text = dr["company"].ToString();
TextBox3.Text = dr["groups"].ToString();
TextBox4.Text = dr["sub"].ToString();
con.Close();
}


حالا اطلاعات توی تکست باکس ها می آد

دیگه برای آپدیت از همون تکست باکس ها استفاده کن
مشکلی داشتی بپرس

mohsen_zelzela00
چهارشنبه 18 آذر 1388, 21:30 عصر
همون id رکورد رو که قبلا به دست آوردی رو در نظر بگیر

اگه خواستی دکمه بذاری که توی رویداد کلیک دکمه و اگه دکمه نذاشتی توی رویداد selectedindexchanged گریدویو به شکل زیر می نویسی : (من با یه دستورات فرضی می نویسم تو بانک خودم)



if (!IsPostBack)
{
w = "Provider=microsoft.jet.oleDb.4.0;Data Source=" + Server.MapPath("shop.mdb");
OleDbConnection con = new OleDbConnection(w);

s = "select * from MyProducts where ProductID='" + ID + "'";
OleDbCommand cmd = new OleDbCommand(s, con);
OleDbDataReader dr;

con.Open();
dr = cmd.ExecuteReader();
dr.Read();
TextBox1.Text = dr["ProductName"].ToString();
TextBox2.Text = dr["company"].ToString();
TextBox3.Text = dr["groups"].ToString();
TextBox4.Text = dr["sub"].ToString();
con.Close();
}


حالا اطلاعات توی تکست باکس ها می آد

دیگه برای آپدیت از همون تکست باکس ها استفاده کن
مشکلی داشتی بپرس
دوست عزیز دستتون درد نکنه ولی کد شما یه مشکلی داره و اون اینه که برای اینکه اطلاعات رو در textbox ها نشون بدی باید اون اطلاعات رو دوباره از database بخونی (یعنی دوباره کاری) ولی روشی که دوستمون raziee گفتند ما اطلاعات رو از خود gridview می خونیم و احتیاج نیست به سرور مراجعه کنیم

raziee
پنج شنبه 19 آذر 1388, 11:16 صبح
خوب ببینید ابتدا شما یه ستون به گرید اضافه میکنید.
<asp:ButtonField CommandName="Select" Text="Edit" />
بعد هم در رویداد :SelectedIndexChanged کد زیر رو مینویسید.
Literal mylt = (Literal)GridView1.SelectedRow.FindControl("litRowNumberNormal");
حله؟

mohsen_zelzela00
جمعه 20 آذر 1388, 22:55 عصر
دوست عزیز دستت درد نکنه

یه سوال دیگه

آیا من می تونم به جای استفاده از


<asp:ButtonField CommandName="Select" Text="Edit" />

از یک button معمولی استفاده کنم چون اگر از نوع select باشه موقعی که بر روی آن کلیک می کنم رنگ آن رکورد عوض می شود

حالا می خوام یا اینکه وقتی اطلاعات رو ثبت کرد رنگ آن رکورد به حالت اولیه خود برگردد یا اینکه از یک button معمولی استفاده کنم


ممنون می شم کمکم کنید

raziee
شنبه 21 آذر 1388, 09:04 صبح
چرا تست نمیکنید و سریع سوالتون رو اینجا مطرح میکنید؟
بهتره که اول خودتون تست کنید ببینید به چه نتیجه ای میرسید .

جواب سوالتون "بله" هست. میتونید استفاده کنید. فقط باید کد ها رو درون همون رویداد باتنی که ایجاد کردید بنویسید.
شاد باشید

mohsen_zelzela00
شنبه 21 آذر 1388, 17:48 عصر
چرا تست نمیکنید و سریع سوالتون رو اینجا مطرح میکنید؟
بهتره که اول خودتون تست کنید ببینید به چه نتیجه ای میرسید .

جواب سوالتون &quot;بله&quot; هست. میتونید استفاده کنید. فقط باید کد ها رو درون همون رویداد باتنی که ایجاد کردید بنویسید.
شاد باشید

من وقتی که یک button درون gridview قرار می دم و می خوام درون رویداد کلیک آن کدهام رو بنویسم موقعی که به قسمت کد می رم و می خوام کد بنویسم اصلاً نام آن buttonm رو پیدا نمی کنمممنون میشک کمک کنید

raziee
یک شنبه 22 آذر 1388, 00:17 صبح
من وقتی که یک button درون gridview قرار می دم و می خوام درون رویداد کلیک آن کدهام رو بنویسم موقعی که به قسمت کد می رم و می خوام کد بنویسم اصلاً نام آن buttonm رو پیدا نمی کنمممنون میشک کمک کنید

اگه از تمپلیت استفاده میکنید باید در حالت تمپلیت روی باتن دابل کلیک کنید تا کدها ظاهر شوند.

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