PDA

View Full Version : radio button در گرید ویو



angel farahani
چهارشنبه 03 اردیبهشت 1393, 22:05 عصر
با سلام ، میخوام مطابق تصویر زیر ، در حالت عادی گرید ویو ، با زدن دکمه های radio button تعیین وضعیت ، فیلد وضعیت را مقدارش رو مشخص کنم . نکته ای که مهم تره اینکه بتونم بدون وجود دکمه برای edit ، این امکان را داشتم . ممنونم

118283

mRizvandi
پنج شنبه 04 اردیبهشت 1393, 13:45 عصر
از TemplateField استفاده کن و Radio Button رو در همن ItemTemplate قرار بده تا در حالت عادی دیده بشه. بعد باید به RBها CommandNameبدی و در رویداد ItemCommand بر اساس نوع Command عملیات مربطه رو انجام بدی.

این هم شبه کد نمایش:

<TemplateField .....>
<ItemTemplate>
<asp:radiobutton .... CommandName="OrderCanceled"....>
<asp:radiobutton .... CommandName="OrderSent"....>
</ItemTemplate>
</TemplateField .....>

angel farahani
پنج شنبه 04 اردیبهشت 1393, 19:49 عصر
سپاس از شما ، اما commandname رو چه جوری بدم ؟ یعنی جز خصوصیات رادیو باتن نمیاد . و اینکه میخوام تا یک گزینه از رادیو باتن رو انتخاب کرد ، فیلد وضعیت رو تغییر بده . لطفا بیشتر راهنماییم کنید

رویداد ItemCommand را از کجا بیارم ؟؟

angel farahani
جمعه 05 اردیبهشت 1393, 10:31 صبح
دوستان لطفا راهنمایی فرمایید ، منتظرم

mRizvandi
جمعه 05 اردیبهشت 1393, 14:53 عصر
دوستان لطفا راهنمایی فرمایید ، منتظرم

یه اشتباه توی منطقی که من اشاره کردم هست و اون هم اینه که RadioButton خصوصیت CommandName نداره و نمیشه باهاش کامندی رو سمت سرور فرستاد.
بنابراین باید سناریو رو عوض کرد:
یک: از دو دکمه رادیویی و یک دکمه ثبت استفاده کنید.
دو: از یک لیست و دکمه ثبت استفاده کنید.
پیشنهاد خودم حالت دوم هست که سادگی و درک راحت تری برای کاربر داره.

angel farahani
جمعه 05 اردیبهشت 1393, 14:59 عصر
ممنونم ، یعنی اینکه کدهای مربوط به ویرایش و درج در پایگاه رو در همون دکمه بنویسم ؟ منظورتون combobox هست ؟

mRizvandi
جمعه 05 اردیبهشت 1393, 16:28 عصر
چند تا موضوع در این خصوص وجود داره، که سعی کردم همه رو حل کنم و یک کد کامل براتون گذاشتم:

اول اینکه وقتی از DropDownList استفاده کنید دیگه نمیتونید به مقدار اون دسترسی داشته باشید، برای این منظور باید CommandArgument با مقدار Index ردیف مورد نظر مقداردهی بشه.
موضوع بعدی اینکه باید DropDownList باید اعتبار سنجی داشته باشه که بشه رفتار کاربر رو کنترل کرد.
برای این منظور لازم هست که مقدار ValidationGroup هر LinkButton که برای ثبت تغییرات هست با مقدار ValidationGroup مربوط به کنترل اعتبارسنجی همون ردیف یکسان باشه، برای همین باید مقدار ValidationGroup به صورت داینامیک ست بشه، که من اون رو با کلید اصلی مقدار دهی کردم که مطمن باشم که تکراری نمیشه.

به کدهای زیر دقت کنید:


<asp:TemplateField HeaderText="Set Status" ItemStyle-Width="150">
<ItemTemplate>
<asp:DropDownList ID="ddlVisible" runat="server">
<asp:ListItem Text="---" Value="0" />
<asp:ListItem Text="Visible" Value="true" />
<asp:ListItem Text="Invisible" Value="false" />
</asp:DropDownList>
<asp:RequiredFieldValidator ID="rfvVisible" runat="server" ControlToValidate="ddlVisible" InitialValue="0" ErrorMessage="*" ValidationGroup='<%# Eval("NewsID") %>' />
<asp:LinkButton ID="lbChangeVisible" runat="server" Text="Change" CommandName="ChangeVisible" CommandArgument='<%# Container.DataItemIndex %>' ValidationGroup='<%# Eval("NewsID") %>' />
</ItemTemplate>
</asp:TemplateField>

حالا در سمت سرور باید اینطوری رفتار کرد:


int rowId = int.Parse(e.CommandArgument.ToString());
string selectedValue = ((DropDownList)gvNewsItem.Rows[rowId].FindControl("ddlVisible")).SelectedValue;
int newsId = Convert.ToInt32(gvNewsItem.DataKeys[rowId].Value);


خط اول برای به دست آوردن مقدار اندیس ردیفی است که کاربر دکمه تغییر یا ثبت رو زده.
خط دوم برای بدست آوردن مقدار انتخاب شده در DropDownList هست.
خط سوم هم برای بدست آوردن مقدار آی دی رکورد همان ردیف.

خب حالا همه چی آماده است و کارهای لازم انجام شده و میشه رکورد رو در دیتابیس آپدیت کرد.

من سورس رو براتون میذارم که اگر نیاز شد استفاده کنید.
موفق باشید.

angel farahani
جمعه 05 اردیبهشت 1393, 20:02 عصر
واقعا ممنونم از وقتی که گذاشتین ، حتما نتیجه رو اعلام میکنم . سپاس

angel farahani
جمعه 05 اردیبهشت 1393, 22:21 عصر
از این خط ایراد می گیره :
int rowId = int.Parse(e.CommandArgument.ToString());

خطای : Input string was not in a correct format.

angel farahani
یک شنبه 07 اردیبهشت 1393, 23:17 عصر
دوستان اگر کسی میتونه راهنمایی کنه لطفا . منتظرم

alireza.zahani
دوشنبه 08 اردیبهشت 1393, 11:16 صبح
باید تو template بسازی رادیو باتن رو و موقع گرفتنش find control کنی

angel farahani
دوشنبه 08 اردیبهشت 1393, 19:58 عصر
من مطابق آموزشی که در پست 7 گذاشتن رفتم و حالا این خطا رو میده :(

alireza.zahani
سه شنبه 09 اردیبهشت 1393, 13:43 عصر
از این خط ایراد می گیره :
int rowId = int.Parse(e.CommandArgument.ToString());

خطای : Input string was not in a correct format.
CommandArgument رو بهش دادی؟


CommandArgument رو بهش دادی؟

mRizvandi
پنج شنبه 11 اردیبهشت 1393, 12:42 عصر
حتما چک کنید که مقدار آرگومان دستور مثل کد زیر مقداردهی شده باشه:

CommandArgument='<%# Container.DataItemIndex %>'