PDA

View Full Version : استفاده از دستور شرطی if در گریدویو



mahmood1000
چهارشنبه 27 دی 1391, 16:29 عصر
سلام دوستان
من سرچ کردم اما مطلبی پیدا نکردم.
میخواستم تو گریدویو وقتی داره ساخته میشه چک کنه اگر یکی از فیلدها false بود بنویسه "منتظر باشد" اگر true بود بنویسه "انجام شد".

یه چیزی مثل این کد:

<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" EnableModelValidation="True">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<%if (Eval("file_status") == "true")
{ %>
<asp:Label ID="Label15" runat="server" Text="انجام شد" Font-Bold="false"></asp:Label>
<%}%>
<%if (Eval("file_status") == "false")
{ %>
<asp:Label ID="Label1" runat="server" Text="منتظر باشید" Font-Bold="false"></asp:Label>
<%}%>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

اما این کد انجام نمیشه
از دوستانی که میتونن تقاضای کمک دارم

amirzandi
چهارشنبه 27 دی 1391, 16:34 عصر
شما باید در در رویداد Row_DataBound این شرط را کنترل کنید.

malloc
چهارشنبه 27 دی 1391, 16:52 عصر
محمود جان قربون عکست برم :لبخند: بهترین حالت برای اینکار اینه که اینکار و تو دیتابیس انجام بدی . یعنی مثلا مثل کد زیر که من استفاده کردم تو select یه دستور case بزاری :
select [name],family,Email,Phone, (case Usertype when '2' then 'مدیر' else 'کاربر' END) as kind from [User]

ahmad156
چهارشنبه 27 دی 1391, 17:17 عصر
protected void gvForm_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow )
}
if(your condition)
e.Row.Cells[7].value= "منتظر باشید";
else
e.Row.Cells[7].value= "انجام شد";

}}

به جای عدد 7 شماره ستون مورد نظر رو بنویسین

اوبالیت به بو
چهارشنبه 27 دی 1391, 19:37 عصر
چرا اینقدر سخت؟؟؟؟


یک تابع Public در همون صفحه بسازید و یک مقدار رو نسبت بدید:



public string GetStatusName(bool Status)
{
string StatusName = String.Empty;
if (status==false)
StatusName = "انجام نشده";
else if (Status == true)
StatusName = "انجام شد";

return StatusName;
}


و بعد در گرید:


<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" EnableModelValidation="True">
<Columns>
<asp:TemplateField>
<ItemTemplate>


<asp:Label ID="Label15" runat="server" Text=<%# GetStatusName((bool)Eval("StatusField")) %> Font-Bold="false"></asp:Label>


</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

mahmood1000
چهارشنبه 27 دی 1391, 20:49 عصر
چرا اینقدر سخت؟؟؟؟


یک تابع Public در همون صفحه بسازید و یک مقدار رو نسبت بدید:



public string GetStatusName(bool Status)
{
string StatusName = String.Empty;
if (status==false)
StatusName = "انجام نشده";
else if (Status == true)
StatusName = "انجام شد";

return StatusName;
}


و بعد در گرید:


<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" EnableModelValidation="True">
<Columns>
<asp:TemplateField>
<ItemTemplate>


<asp:Label ID="Label15" runat="server" Text=<%# GetStatusName((bool)Eval("StatusField")) %> Font-Bold="false"></asp:Label>


</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>




دوست عزیز اجرا نمیشه. خودتون امتحان کردید؟

mahmood1000
چهارشنبه 27 دی 1391, 20:55 عصر
محمود جان قربون عکست برم :لبخند: بهترین حالت برای اینکار اینه که اینکار و تو دیتابیس انجام بدی . یعنی مثلا مثل کد زیر که من استفاده کردم تو select یه دستور case بزاری :
select [name],family,Email,Phone, (case Usertype when '2' then 'مدیر' else 'کاربر' END) as kind from [User]

دوست عزیز تیبل من به این صورت هستش. میشه برای من این کد رو که گفتی با فیلدهای تبیل من بنویسید؟

SELECT file_id, file_name, file_status, file_path FROM tbl_fileUpload

برای فیلد file_status میخوان این کار انجام بشه

mahmood1000
چهارشنبه 27 دی 1391, 21:01 عصر
از همه دوستان سپاس گذارم. با روش SQL حل شد.

جناب آقای اوبالیت به بو میشه شما روشتو بررسی کنید و دباره ارسال کنید؟ روش شما جالب بود اما فعلا که کار نکرده

اوبالیت به بو
شنبه 30 دی 1391, 10:21 صبح
سلام

در اون صفحه ای که گرید رو نمایش می دید داخل بخش ServerSide بشید و اون تابع رو پیاده کنید. تابع باید حتما خروجی داشته باشد + Public باشد.

حال داخل TemplateField گرید بشید و روی Label یا هر کنترلی که می خواید چیزی رو نشون بده رو انتخا کنید و وارد EditDataBinding... بشید. قسمت Text رو اینطور بنویسید: FunctionName((DataType)Eval("Column")) i

FunctionName: اسم تابع شماست که پیاده سازیش کردید.
DataType : نوع داده ای هست که در ورودی تابع مشخص کردید.
Column: ستون یا فیلد مورد نظر شما در جدول بانک اطلاعاتی هست.

majid.mp
شنبه 30 دی 1391, 11:38 صبح
محمود جان قربون عکست برم :لبخند: بهترین حالت برای اینکار اینه که اینکار و تو دیتابیس انجام بدی . یعنی مثلا مثل کد زیر که من استفاده کردم تو select یه دستور case بزاری :
select [name],family,Email,Phone, (case Usertype when '2' then 'مدیر' else 'کاربر' END) as kind from [User]
سلام
میشه کدتون رو تشریح کنید؟
با تشکر.

mahmood1000
یک شنبه 01 بهمن 1391, 08:31 صبح
سلام
میشه کدتون رو تشریح کنید؟
با تشکر.

تو این دستور همونطور که مشخصه داره از جدول یوزر [User] سلکت میکنه. تنها جاییش که شاید یکم مهم باشه داخل پرانتز هستش. که یک شرط برقرار شده برای فیلد Usertype . شرط به این صورته که اگه Usertype برابر 2 باشه خروجی را "مدیر" و در غیر این صورت خروجی "کاربر" بشه.
بعد از پرانتز منظور از as kind اینه که این خروجی را تحت عنوان فیلدی به نام kind برگردونه.

mahmood1000
یک شنبه 01 بهمن 1391, 09:21 صبح
سلام

در اون صفحه ای که گرید رو نمایش می دید داخل بخش ServerSide بشید و اون تابع رو پیاده کنید. تابع باید حتما خروجی داشته باشد + Public باشد.

حال داخل TemplateField گرید بشید و روی Label یا هر کنترلی که می خواید چیزی رو نشون بده رو انتخا کنید و وارد EditDataBinding... بشید. قسمت Text رو اینطور بنویسید: FunctionName((DataType)Eval("Column")) i

FunctionName: اسم تابع شماست که پیاده سازیش کردید.
DataType : نوع داده ای هست که در ورودی تابع مشخص کردید.
Column: ستون یا فیلد مورد نظر شما در جدول بانک اطلاعاتی هست.

بسیار سپاس
نمی دونم چرا سری قبل کار نکرد.
الان خیلی خوب داره کار میکنه