PDA

View Full Version : سوال: چطوری برای لینکهای داخل gridview برنامه نویسی کنم؟



دختر کوهستان
دوشنبه 22 آذر 1389, 21:26 عصر
من یه سری لینک داخل gridview دارم. برای انتقال به صفحات دیگه که مشکلی نداره ، url رو تنظیم می کنم.منتها می خوام قبل از عمل انتقال یه سری کارا رو هم انجام بده مثلاً یه فیلد session رو پر کنه.چطوری می تونم انجامش بدم.قبلاً از راهنماییتون خیلی خیلی تشکر میکنم.

Mostafa_Dindar
دوشنبه 22 آذر 1389, 21:53 عصر
سلام ,

یک فیلد از نوع ButtonField اضافه کنید , نوع ButtonType اون رو مقدار Link بدید که به شکل لینک دیده بشه , مقدار CommandName اون رو یک مقدار مشخص بدید , و در رویداد RowCommand از GridView هر کاری رو که دوست دارید انجام بدید

sam166
دوشنبه 22 آذر 1389, 22:00 عصر
طیق گفته دوستمون در رویداد RowCommand از GridView اینجوری بنویسید

if (e.CommandName == "remove")
{


}
else if (e.CommandName == "ok")
{

}

دختر کوهستان
دوشنبه 22 آذر 1389, 22:16 عصر
سلام ,

یک فیلد از نوع ButtonField اضافه کنید , نوع ButtonType اون رو مقدار Link بدید که به شکل لینک دیده بشه , مقدار CommandName اون رو یک مقدار مشخص بدید , و در رویداد RowCommand از GridView هر کاری رو که دوست دارید انجام بدید


طیق گفته دوستمون در رویداد RowCommand از GridView اینجوری بنویسید

if (e.CommandName == "remove")
{


}
else if (e.CommandName == "ok")
{

}

ممننون از کمک هر دوتون.فقط یه سوال دیگه.من تو gridview فقط یه دونه template فیلد دارم که توی اون همه ی کنترل هام رو اعم از لینک و لیبل و .. داخل یه جدول با ترتیب خاصی( این که هر کنترل کجا باشه و ...) توی این فیلد گذاشتم. اضافه شدن یه فیلد جدید شکل ظاهریش رو به هم می ریزه. به نظرتون راهی نداره؟
نمیشه برای همون link button که قرار دادم برنامه نویسی کرد؟

مهدی کرامتی
سه شنبه 23 آذر 1389, 09:21 صبح
می توانید در همان TemplateField یک LinkButton اضافه کنید و مشخصه CommandName اون رو برابر چیزی مثل MyCommand قرار بدهید. سپس برای بقیه کار مثل پاسخ شماره 3 (http://barnamenevis.org/showthread.php?264737-%D8%B3%D9%88%D8%A7%D9%84-%DA%86%D8%B7%D9%88%D8%B1%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%84%DB%8C%D9%86%DA%A9%D9%87%D8%A7%DB%8C-%D8%AF%D8%A7%D8%AE%D9%84-gridview-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%DA%A9%D9%86%D9%85%D8%9F&p=1172321&viewfull=1#post1172321) عمل کنید.

دختر کوهستان
سه شنبه 23 آذر 1389, 18:40 عصر
نه. می دونید منظورم چیه؟این لینک باتن داره به ازای همه ی سطرهای gridview تکرار میشه بنابراین اگه به روشی که میگید عمل کنیم فرقی نمی کنه که کاربر داره لینک باتن کدوم سطر رو کلیک می کنه، برنامه ای که در rowcommand نوشته شده همیشه اجرا میشه. ولی من می خوام برنامه نویسی ای که برای لینک باتن شده ، وابسته به مقادیر کنترل های اون سطر باشه.برای این چکار میشه کرد؟

alonemm
سه شنبه 23 آذر 1389, 19:19 عصر
دوست من شما دقیقا بگید چه عملیاتی میخواید در رویداد لینک انجام بشه تا یک راه کار بهتر به شما معرفی کنم.
بعد شما چه کنترلی روی این لینک ها میخواهید انجام بدید؟

دختر کوهستان
سه شنبه 23 آذر 1389, 20:24 عصر
این لینک اسم یه کتابه. زیر اون هم اسم نویسنده و ناشرش که همه رو از جدولای بانکم select کردم.حالا میخوام با کلیک لینک بره به صفحه ای که مشخصات کامل کتاب رو نشون میده. برای این کار به همون اطلاعات اولیه احتیاج دارم و می خوام که یه جوری مثلاً با session نگهش دارم. منتها نمی دونم چطور باید مقادیر اون سطر خاص رو به دست بیارم.

rana-writes
سه شنبه 23 آذر 1389, 20:55 عصر
سلام
خب این که خیلی ساده است
شما با همون لینک باتن، شماره سطر یا شماره کتاب رو میگیرین و توی یه QueryString یا Session میریزین و به صفحه ی بعدی میرین

اینم یه نمونه:

کد Aspx. توی این کد، توی قسمت CommandArgumant اون فیلدی که میخواین مقدارش رو داشته باشین میریزین که همون کد یا آی دی کتاب میشه برای شما



<asp:TemplateField>
<ItemStyle Width="10%"/>
<ItemTemplate >
<asp:ImageButton ID="Edit" CommandName="EditPost" runat="server"
CommandArgument='<%# Eval("PostID") %>' ImageUrl="~/images/Modify.png" ToolTip="ShowPost"/>
</ItemTemplate>
</asp:TemplateField>


این هم کد C#



int id = Int32.Parse((string)e.CommandArgument);
if (e.CommandName == "EditPost")
{
Response.Redirect("EditPost.aspx?PostID=" + id);
}


توی خط اول این تکه کد، توی متغیر id شماره سطر مورد نظر رو نوشتم یا همون آی دی مورد نظر رو
بعد هم اینو با QueryString پاس دادم به صفحه EditPost
توی رویداد Page_Load صفحه EditPost هم این کوئری استرینگ رو میگیرین و از توی بانکتون Select مورد نظر رو انجام بدین

موفق باشین

دختر کوهستان
سه شنبه 23 آذر 1389, 22:47 عصر
در واقع اگه درست متوجه منظورتون شده باشم یه دکمه داریم که با کلیک روش به صفحه ی دیگه انتقال پیدا می کنیم به علاوه ی این که id اون سطری رو که از اونجا پاس شدیم رو هم داریم. کدتون رو اجرا کردم اما عملی انچام نشد و توی همون صفحه باقی موند.

rana-writes
چهارشنبه 24 آذر 1389, 11:12 صبح
دقیقا درسته
یه دکمه داریم، با کمک CommandArgumant هم Id سطر رو میگیریم
احتمالا برای این عملی نشد چون شما توی این خط


Response.Redirect("EditPost.aspx?PostID=" + id);

صفحه EditPost.aspx نداشتین
بذارین کد خودمو براتون توضیح بدم
من این کد رو برای یه گرید نوشتم که در واقع مطالب یه سایت رو نشون می داد، با کلیک روی دکمه میرفت به صفحه EditPost که مطلب انتخاب شده رو برای ویرایش بهم نشون بده
شما هم باید توی این خط، اسم صفحه ای که میخواین مشخصات کتاب رو نشون بده وارد کنین
توجه کنین اینجا شما فقط یک مقدار، یعنی Id سطر رو پاس میدین به صفحه مشخصات کتاب، و طبیعتا با داشتن یه Id میتونین توی رویداد PageLoad همون صفحه جستجو توی بانک رو با SqlDataReader انجام بدین و اطلاعات رو مثلا توی Label هاتون نمایش بدین
بگین تا کجا پیش رفتین که بهتر بتونم کمکتون کنم

موفق باشین

دختر کوهستان
چهارشنبه 24 آذر 1389, 12:07 عصر
شما توی commandargument فیلد postid دارین که شماره سطر gridview رو برمی گردونه اما من نمی دونم چطوری چنین اندیسی ایجاد کنم . من به جای این فیلد id مربوط به کتابم رو که از بانک select کردم رو گرفتم و توی صفحه ی بعدی هم بهش دسترسی دارم اما چون ارتباط بین کتابها و نویسندگان اونها و ناشراشون ارتباط چند به چنده ، من احتیاج دارم id اونا رو هم داشته باشم که این اطلاعات تو هر سطر grid وجود داره ، اما اون لینک باتن فقط یه commandargument داره که id کتابه که وقتی روش کلیک بشه همون رو برمی گردونه.مقادیر دیگه رو نمی دونم چطور به دست بیارم.

دختر کوهستان
چهارشنبه 24 آذر 1389, 18:36 عصر
شما چطور اون فیلد شماره سطر رو دارید؟ از فیلدهای کوئری ایه که از بانک select کردین یا gridview امکان دسترسی به شماره سطر رو میده؟ _ در حالی که enable selection رو هم براش فعال نکردیم _

rana-writes
چهارشنبه 24 آذر 1389, 20:33 عصر
خب نه دیگه
این PostId همون شماره پستهای منه که از توی بانکم توی گرید قرار دارم

اول یه سوال، شما با داشتن Id یه کتاب میتونین از طریق Query اطلاعات کاملش رو از بانک بگیرین؟
منظورم اینه که Id کتاب، کلید اصلی کتاب میشه یا نه ؟

اگه اینطوری میشه که مشکل حله، کافیه همینو بگیرین و از توی بانکتون Select کنین و جدولهای مرتبط رو توی select به هم join کنین
شاید اگه فیلدهای جدولهاتون رو بگین بتونم توی نوشتن Select کمکتون کنم
اینطوری که من برداشت کردم، با گرفتن همین یه فیلد میشه کوئری رو نوشت

دختر کوهستان
چهارشنبه 24 آذر 1389, 22:00 عصر
نه از طریق id کتاب نمی تونم اطلاعات کامل بگیرم.چون همون طور که گفتم ارتباط بین جدولام چند به چنده و ممکنه چند تا نویسنده یه کتاب یکسان رو نوشته باشن. همین طور در مورد ناشرا. جدول کتابم همون id رو داره که کلیده و اطلاعات مختصری مثل اسم و توضیحات مربوط به کتاب و ...
جدول نویسنده هم اسم و فامیلی و id
ناشر هم باز اسم و آدرس و ... و id

rana-writes
پنج شنبه 25 آذر 1389, 12:01 عصر
:متفکر: با این حساب این لینکها رو یه نگاهی بندازین:
http://barnamenevis.org/showthread.php?226394-Select-از-طریق-LinkButton(-فوری)

http://barnamenevis.org/showthread.php?233965-دسترسی-به-کنترل-های-درون-GridView

امیدوارم کمکتون کنه

دختر کوهستان
جمعه 26 آذر 1389, 20:53 عصر
ممنون. با اون روش میشه متوجه شد که که کاربر روی لینک باتن کدوم سطر کلیک کرده.حالا شماره ی سطر رو داریم.توی اون تاپیک یکی از کاربرا گفته بود که "داشتن فقط شماره سطر به همراه CommandArgument که مشخص می کنه روی کدوم کلیک شده کافیه، با داشتن شماره سطر می تونید به تمام فیلد ها دسترسی داشته باشید "
مشکل من روی همین تیکه است که bold کردم.دسترسی به فیلدها چطور میشه؟ قبلاً یه بار گفته بودید که اگر این شماره سطر رو به datareader بدی فیلدها رو برمی گردونه.اما مشکل اینه که دیتا ریدر کنترل های اون سطر رو نمی شناسه. اجازه بدین بگم که چه کنترل هایی تو grid دارم شاید کمکی بکنه.

<ItemTemplate>
<table align="right" border="0" cellpadding="0" cellspacing="0" dir="rtl" width="85%">
<tr>
<td style="width: 10%" valign="top">
<strong>
<asp:Label ID="Label1" runat="server" text='<%#Container.DataItemIndex +1 %>'></asp:Label>.</strong>
</td>
<td style="width: 10%">
<img alt="" border="0" height="75" src="book form.aspx" /></td>
<td style="width: 5%">
</td>
<td style="width: 75%">
<table border="0" cellpadding="0" cellspacing="0" dir="rtl">
<tr>
<td>
<asp:LinkButton ID="LinkButton16" runat="server" CommandName="CName" CommandArgument='<%#Container.DataItemIndex%>' text='<%# databinder.eval(container,"dataitem.bname") %>' PostBackUrl="books.aspx" ></asp:LinkButton>
<br />
<strong style="font-size: 8pt; font-family: 'B Nazanin',Tahoma">??????????: <span
style="font-size: 9pt"><span>
<asp:Label ID="Label3" runat="server" Text='<%# databinder.eval(container,"dataitem.wname")+" " + databinder.eval(container,"dataitem.wfname") %>'></asp:Label></span><br />
<span>????:<asp:Label ID="Label4" runat="server" Text='<%# databinder.eval(container,"dataitem.pname") %>'></asp:Label>
<span dir="ltr">
<asp:Label ID="Label5" runat="server" Text='<%# databinder.eval(container,"dataitem.pdate") %>'></asp:Label></span></span></span></strong></td>
</tr>

</table>
<hr style="border-right: #eeeeee 1px solid; border-top: #eeeeee 1px solid; border-left: #eeeeee 1px solid;
width: 95%; border-bottom: #eeeeee 1px solid; height: 1px; background-color: #484848" />
</td>
</tr>
</table>
</ItemTemplate>

حالا چطور می تونم وقتی کاربر روی لینک کلیک میکنه ، مقادیر wname,pname, ... رو به صفحه ی دیگه پاس بدم؟

دختر کوهستان
شنبه 27 آذر 1389, 10:51 صبح
بازم مقادیر فیلدها قابل دسترسی هست؟