PDA

View Full Version : انتخاب رکورد درgridview



azitaj
چهارشنبه 14 مرداد 1394, 18:13 عصر
سلام دوستان
من می خوام وقتی رویselect گرید ویو کلیک کنم تمام اطلاعات اون رکورد رو توی textboxها نمایش بده چه جوری باید کدنویسیش کنم ؟وتوی چه رویدادی از گریدویو؟
لطفا راهنمایی کنید ممنون

mamali92
پنج شنبه 15 مرداد 1394, 01:08 صبح
سلام دوست عزیز؛ تویه تگ <Columns> گریدویو یه تگ <asp:TemplateField HeaderText="" > قرار میدی
داخل این تگ هم یه <ItemTemplate> قرار میدی تا بتونی دکمه ای رو بزاری که کاربر با انتخاب اون دکمه فیلد های رکورد مورد نظر رو بدست بیاره
که من یه نمونه از این دکمه رو اینجا قرار میدم


<asp:LinkButton ID="LbtnEdit" runat="server" CommandName="change" CommandArgument='<%# Eval("Field1") %>'
CssClass="btn btn-success" Title="ویرایش">
<i class="icon-edit"></i></asp:LinkButton>

همینجور که می بینی این یه LinkButton هستش و دارای دو property اصلی برای کار ماست که یکیش CommandArgument و دیگری CommandName هستش.
داخل خصوصیت CommandArgument فیلد کلید اصلی رو قرار می دی و دومی هم وظیفه اینو بر عهده داره که گریدویو تشخیص بده این دکمه انتخاب شده و با کلیک شدن این دکمه میاد و فیلدهای رکورد انتخاب شده رو داخل تکست باکس ها می زاره

خب بعد اینکه کارت با این دکمه تمام شد نوبت اینه که کدهای مربوط به select شدن رو بنویسی.
برای این کار باید رویداد onrowcommand رو برای گرید ویو ایجاد کنی مثل کد زیر:


<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False"
DataKeyNames="ContentId" DataSourceID="ContentsDataSource"
GridLines="None" onrowcommand="GridView1_RowCommand">


خب حالا می ریم سراغ بخش C# و داخل رویداد onrowcommand و این نمونه کدهارو قرار میدیم:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "change")
{
SqlConnection con = new SqlConnection(ContentsDataSource.ConnectionString) ;
string query = "SELECT * FROM KCP_Content WHERE ContentId=@ContentId";
SqlCommand cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("@ContentId", ContentId);
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
dr.Read();
LblId.Text = dr["Field1"].ToString();
TxtTitle.Text = dr["Field12"].ToString();
LblVisit.Text = dr["Field13"].ToString();
dr.Close(); con.Close();
}
}


همینطور که می بینی توسط e.CommandName می تونیم تشخیص بدیم که چه دکمه ای کلیک شده. چون ممکنه که دکمه های زیادی رو در هر ردیف قرار بدیم پس بهتره این شرط باشه
حالا ارتباطمون و دستور Select رو با بانک توسط کدهای زیر به این شکل بر قرار می کنیم:

SqlConnection con = new SqlConnection(ContentsDataSource.ConnectionString) ;
string query = "SELECT * FROM KCP_Content WHERE ContentId=@ContentId";
SqlCommand cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("@ContentId", ContentId);
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
dr.Read();


یادت باشه در قسمت usingها حتما namespace مربوط به اتصال به بانک رو قرار بدی تا شی های بالا قابل تعریف باشن

using System.Data.SqlClient;


خب حالا نوبت اینه که توسط شی dr بیایم و فیلد های استخراج شده رو داخل تکست باکس ها قرار بدیم:

LblId.Text = dr["Field1"].ToString();
TxtTitle.Text = dr["Field12"].ToString();
LblVisit.Text = dr["Field13"].ToString();


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

dr.Close(); con.Close();

LostOfMind
پنج شنبه 15 مرداد 1394, 11:17 صبح
سلام دوستان
من می خوام وقتی رویselect گرید ویو کلیک کنم تمام اطلاعات اون رکورد رو توی textboxها نمایش بده چه جوری باید کدنویسیش کنم ؟وتوی چه رویدادی از گریدویو؟
لطفا راهنمایی کنید ممنون

یک TemplateField در گرید ویو ایجاد کنید و یک لیبل درون آن قرار دهید به صورت زیر:

<asp:TemplateField HeaderText="CategoryID" InsertVisible="False" SortExpression="CategoryID">
<ItemTemplate>
<asp:Label ID="lblCategoryID" runat="server" Text='<%# Eval("CategoryID","{0}") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>


حالا در رویداد SelectedIndexChanged کنترل گرید ویو این لیبل را به صورت زیر فراخوانی کنید:


Label lblCategoryID = (Label)GridView1.Rows[GridView1.SelectedIndex].FindControl("lblCategoryID");


حالا میتونید با کمک ADO.NET و آی دی بدست آمده تمام اطلاعات مورد نیاز خود را بدست آوری

من بر اساس بانک اطلاعاتی خودم این کدها رو نوشتم که باید بر اساس بانک خودتون تغییرش بدین
البته دقت کنید گزینه select مربوط به گرید ویو فعال باشد یا اگر از botton خودتون استفاده می کنید خاصیت CommandName="Select" را تنظیم کنید

mhi.iranmanesh
دوشنبه 07 اسفند 1396, 20:29 عصر
سلام، دوستان من می خوام این کار به این صورت انجام بدم که وقتی کاربر روی یک ردیف کلیک کرد اطلاعات اون ردیف رو برگردونه و از هیچ لینک یا دکمه ای استفاده نکنم لطفاً راهنماییم کنید حتی از رویداد های OnSelectedIndexChanging,OnSelectedIndexChanged,OnR owCommand استفاده کردم ولی به نتیجه ای نرسیدم وقتی روی ردیفی کلیک می کنم اصلاً هیچ اتفاقی نمی افته.