PDA

View Full Version : سوال: پر کردن دستی GridView



Mehr.Iman
یک شنبه 17 شهریور 1387, 16:50 عصر
با عرض سلام خدمت همه دوستان :
من میخوام گریدویمو خودم دستی پر کنم . یعنی بگم اگه یه سری شرایط برقرار بود یه سطر با اطلاعاتی که خودم بهش میدم به گرید اضافه کنه ، کسی می تونه کمکم کنه؟
ممنون میشم اگه کدشو برام بذارید چون خیلی دنبالش گشتم

Mehr.Iman
یک شنبه 17 شهریور 1387, 17:21 عصر
یعنی واقعا هیشکی نمیخواد کمکم کنه؟

mohammad87
یک شنبه 17 شهریور 1387, 17:33 عصر
شما بايد از قسمت edit template در gridview استفاده كنيد , بايد اطلاعاتتون رو به مثلا ليبل بايند كنيد ....

Mehr.Iman
یک شنبه 17 شهریور 1387, 17:39 عصر
دوست عزیز ممکنه بیشتر توضیح بدید.
چطوری باید از edit template استفاده کنم؟

a_mehdizadeh
یک شنبه 17 شهریور 1387, 18:07 عصر
سلام
فکر می کنم این url به شما کمک کنه.
http://www.developercenter.ir/Forum/showthread.php?t=12919

Mehr.Iman
یک شنبه 17 شهریور 1387, 20:50 عصر
a_mehdizadeh عزیز از کمکت ممنونم ،با لینکی که گذاشتی مشکلم حل شد.
همونطور که دوستان نوشتند با کد زیر می توان به صورت دستی به گرید سطر اضافه کرد:


DataTable dt = new DataTable();
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("first name", typeof(string));
dt.Columns.Add("last name", typeof(string));
dt.Rows.Add(new object[] { 1, "Your String", "Your String" });
GridView1.DataSource = dt;
GridView1.DataBind();

Mehr.Iman
دوشنبه 18 شهریور 1387, 00:28 صبح
ولی حالا یه سوال دیگه برام پیش اومده ، اونم اینه که من یه HyperLinkField به GridView اضافه کردم و میخوام بگم که هر موقع روش کلیک شد اطلاعات یه ستون دیگه از همون سطرو تو یه متغیر ذخیره کنه.
کسی میدونه باید چجوری این کارو بکنم؟

a_mehdizadeh
دوشنبه 18 شهریور 1387, 00:57 صبح
سلام
شما می تونید به جای HyperLink ازLinkButton استفاده کنید و برای property ای به نام CommandArgument اون، کد زیر رو بنویسید:

Eval("id").ToString()
و بعد در رویداد click آن هم کد زیر را بنویسید:



protected void LinkButton1_Click(object sender, EventArgs e)
{
foreach (GridViewRow myrow in GridView1.Rows)
{
LinkButton l=(LinkButton)myrow.FindControl("LinkButton1");
string data=l.CommandArgument;

}

}

البته با این فرض که id گریدویو شماGridView1 و LinkButton1 هم id لینک باتن شما هست و ستونی که می خواهید اطلاعات اون رو دریافت کنید ستون id هست و متغیری که می خواهید داده رو در اون ذخیره کنید به نام data هست.
اگه درست راه حل رو بیان نکردم و شما متوجه نشدید بگید.

Mehr.Iman
دوشنبه 18 شهریور 1387, 01:36 صبح
دوست عزیز خسته نباشید.
متاسفانه منظور شما رو متوجه نشدم.چطور میتونم بجای HyperLink ازLinkButton استفاده کنم؟
سوالمو واضح تر مطرح می کنم :
من تو هر سطر گرید ویوم یه لینک (مشاهده جزئیات) گذاشتم ،میخوام بگم کاربر رو هر کدوم از این لینکا که کلیک کرد محتوای یه ستون دیگه از همون سطرو تو یه متغیر سراسری ذخیره کنه. بعد تو گرید ویو صفحه بعد دستور Select تو اینجوری بنویسم:
select * from tbl where name=X
که X مقدار همون متغیر سراسریه و name هم اسم ستونی که کلید اصلی هست.

a_mehdizadeh
دوشنبه 18 شهریور 1387, 12:09 عصر
سلام
دوست عزیز اینو زودتر می گفتید من فکر کردم هدفت از گذاشتن HyperLink فقط ذخیره کردن داده در یک متغیر هست ولی برای این کاری که می گید با ید از همون HyperLink استفاده کنید و NavigateUrl اون رو کد زیر قرار بدید:

"Default.aspx?p=" + Eval("id").ToString()
که به جای Default.aspx نام صفحه ای که می خواید جزئیات رو نمایش بده قرار می دید و به جای id نام ستونی که می خواید .
و در صفحه ای که می خواید جزئیات رو نمایش بده در gridview وقتی query تون رو نوشتید مشخص میکنید که ستونی که در قسمت where نوشتید از querystring ای به نام p گرفته بشه .اگه مشکلتون حل نشد بگید .

Mehr.Iman
دوشنبه 18 شهریور 1387, 20:36 عصر
با سلام
دوست عزیز ازاینکه پیگیر کار من هستید ممنونم. طبق گفته شما NavigationURL مربوط HyperLink رو برابر
کد:
~/ResDetails.aspx?p= Eval("ResName").ToString()
قرار دادم و گرید ویو رو هم همونطور که فرمودید تنظیم کردم ولی متاسفانه باز هم به نتیجه نرسیدم.
وقتی که رو HyperLink کلیک می کنم وارد صفحه ResDetails.aspx میشه ولی تو گریدویو چیزی نشون نمیده . دیگه نمیدونم باید چیکار کنم!

a_mehdizadeh
دوشنبه 18 شهریور 1387, 20:48 عصر
سلام دوست عزیز اگه همینطوری که اینجا نوشتید تو برنامه هم نوشته باشید معلومه که عمل نمیکنه شما باید به صورت زیر عمل کنید:

"ResDetails.aspx?p=" + Eval("ResName").ToString()
و باید یه templatefield به گرید ویو اضافه کنید و اون رو edittemplate کنید ودر قسمت itemtemplate یه کنترل HyperLink به اون اضافه کنید و در smarttag اون لینک گزینه editdatabindings… رو انتخاب کنید و بعد از انتخاب Navigateurl در قسمت custom binding کد بالا رو بنویسید این هم توضیح به صورت details ،امیدوارم مشکلتون حل بشه در ضمن کدهاش رو براتون ضمیمه کردم خیلی ساده است فقط برای اینکه روش کار دستتون بیاد هر دو gridview رو دستی پر کردم بازم مشکلتون حل نشد بگید.

Mehr.Iman
دوشنبه 18 شهریور 1387, 22:12 عصر
با سلام
بالاخره مشکل من حل شد!
برای استفاده سایر دوستان راه حل رو می نویسم:
ابتدا باید به گرید یه TemplateField اضافه کنیم ، بعد مثلا یک LinkButton به این فیلد اضافه می کنیم. البته می توان به طور مستقیم از کد HTML زیر هم استفاده کرد:



<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="x" CommandArgument='<%#Eval("ResName") %>' Text="جزئیات">
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>

</Columns>



حالا باید از رویداد RowCommand استفاده کرد :



<asp:GridView ID="GridView1" runat="server" BackColor="White" BorderColor="#E7E7FF"
BorderStyle="None" BorderWidth="1px" CellPadding="3" GridLines="Horizontal" Height="221px"
Width="337px" OnRowCommand="GridView1_RowCommand">







protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if ( e.CommandName == "x")
{
Response.Redirect("ResDetails.aspx?gid=" + e.CommandArgument.ToString());
}


ResDetails.aspxنام صفحه ای است که قصد داریم جزئیات را در آن مشاهده کنیم.
Gid هم نام QueryString
از همکاری دوست خوبم a_mehdizadeh (http://barnamenevis.org/forum/member.php?u=73516) که واقعا زحمت کشیدند ممنونم.
همچنین از آقای علیرضا صالحی از کاربران دائمی همین سایت هم بابت پستهای مفیدشون متشکرم .
این لینکها هم میتونه بیشتر به دوستان کمک کنه:
http://www.dotnetcurry.com/ShowArticle.aspx?ID=107&AspxAutoDetectCookieSupport=1
http://forum.niksalehi.com/showthread.php?p=343796