1398-03-30 22:46 مشکلات بی پایان برنامه من :D - حذف سطر عکس از دیتاگریدویو
booysusa

 
با درود فراوان خدمت مهندس شریفی گرامی

مهندس اون مشکلات رو حل کردم، ولی الان یک قسمتی هست که مشکل دارم، من نمیتونم سطری رو که در قسمت اسکن مدارک هست رو حذف کنم (عکس ها از اینجا بارگزاری میشن)
حذف سطری که فقط نوشته باشه رو بلدم ولی حذف سطری که عکس درونش هست بلد نیستم و کمی متفاوت هست
فکر کنم این مشکلمه
اگر نتونستید برنامه رو باز کنید ، لطفا کدهارو اینجا بنویسید من اصلاح میکنم چون وقتم خیلی کمه

بازم ببخشید، واقعا ممنون میشم کد رو بررسی کنید و مشکل من رو بهم بگید یا اصلاح کنید
(البته با روش من )


لینک دانلود

سی شارپ
اس کیو ال 2017
1398-03-31 12:36
booysusa

 
و اینکه چطور بستانکار بدهکارو بصورت 1 و 2 در دیتابیس ذخیره کنم و هنگام لود بجای 1 و 2 بنویسه بستانکار و یا بدهکار
1398-04-01 00:29 مشکلات پایان پذیر برنامه شما
حاجی شریفی
مؤسس سایت
 
سلام
نقل قول نوشته شده توسط: booysusa
... ممنون میشم کد رو بررسی کنید ...

متاسفانه در حال حاضر با فیلترشکن و بدون فیلترشکن (وبا پنج مرورگر مختلف) نتوانستم سایت picofile که فایل را آپلود کرده اید باز کنم.
تا بیدار هستم ، مجدد بررسی میکنم ببینم سرورشان online شده یا خیر
این هم سند آفلاین بودن سایت:


نقل قول نوشته شده توسط: booysusa
حذف سطری که فقط نوشته باشه رو بلدم ولی حذف سطری که عکس درونش هست بلد نیستم

هیچ فرقی ندارد.
هر نوع سطری با فرمان DELETE عادی حذف میشود.
DELETE FROM tablename WHERE id = 123;


نقل قول نوشته شده توسط: booysusa
بستانکار بدهکارو بصورت 1 و 2 در دیتابیس ذخیره کنم

در این مورد که یک فایل برایتان فرستادم، باور بفرمائید در ساده ترین حالت ممکن نوشتم که نگویید پیچیده شده

DGVComboBoxColumn.zip
الان مشکل تان داخل Grid است یا در بیرون آن؟! چه چیز را باید بیشتر توضیح دهم؟

اگر امشب بتوانم سورس تان را دانلود کنم، مجدد جواب خواهم داد.
شب خوش.
1398-04-01 10:56
booysusa

 
درود
نقل قول
هیچ فرقی ندارد.
هر نوع سطری با فرمان DELETE عادی حذف میشود.
DELETE FROM tablename WHERE id = 123;

بله متوجه هستم، من از کد زیر استفاده می کنم ولی مشکل اینجاست که من نمی تونم تصویر رو از حافظه پاک کنم و فقط از گرید ویوو پاک میشه
کد حذف من

public bool DeleteImage() // کد حذف کردن در بخش حساب
{
try
{
string command = @"delete from [Image] where idi=@idi";

List<SqlParameter> parametersList = new List<SqlParameter>();
var idiParameter = new SqlParameter("@idi", this.idi);
parametersList.Add(idiParameter);

var db = new DataAccess.DatabaseManager();
return db.ExecuteCommand(command, parametersList);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
return false;
}
}




و استفاده از این کد رو اینجوری به دکمه حذف میدم
private void btnDeleteImage_Click(object sender, EventArgs e)
{
if (bdsImag.List.Count > 0)
{
var result = FarsiMessageBox.MessageBox.Show("هشدار", "آیا میخواید این کاربر را حذف کنید؟", FarsiMessageBox.MessageBox.Buttons.YesNo, FarsiMessageBox.MessageBox.Icons.Warning);
if (result == DialogResult.Yes)
{
var contact = bdsImag.Current as Business.Mojodiatha.Contact;
contact.DeleteImage();
DataRefreshImage();
}
}
}


چطوری بنویسمش که فایل از حافظه هم حذف بشه؟
1398-04-02 03:10
حاجی شریفی
مؤسس سایت
 
سلام
نقل قول نوشته شده توسط: booysusa
... من نمی تونم تصویر رو از حافظه پاک کنم ...چطوری بنویسمش که فایل از حافظه هم حذف بشه؟

حقیقتش متوجه منظورتان نمیشوم، سورس را هم نتوانستم دانلود کنم.

نمیدانم منظورتان از "حافظه" چیست ؟ دقیق تر و شفاف تر توضیح دهید
حافظه خیلی لفظ بزرگ و کلی است، الآن مگر تصویر در کجا می ماند ؟!

شاید کنترلر PictureBox ای دارید و منظورتان خالی شدن آن باشد ؟!
نمی توانم حدس دیگری بزنم.

برای خالی شدن PictureBox میتوانید از دستور ساده زیر استفاده کنید:
this .PictureBox1.Image = null  ;


ویا دستور کامل تر زیر:
using  (this .PictureBox1.Image) this .PictureBox1.Image = null  ;


اگر بحث PictureBox نیست، ساده تر توضیح دهید، کجا را میخواهید پاک و یا خالی کنید.
شب خوش.
1398-04-03 02:23
booysusa

 
درود مهندس
منظورم از حافظه همان مکانی هست که تصویر ذخیره شده است
کثلا یک پوشه کنار برنامه به اسم Image و تصاویر آنجا ذخیره میشن
میخوام با حذف سطر، عکس از اونجا هم حذف بشه (کدشو نوشتم ولی یه مشکل داذه که با دیدن سورس متوجه ان میشید)

شب بخیر
1398-04-03 02:24
booysusa

 
مهندس شریفی گرامی بررسی کردم سایت دانلود درست شده است
1398-04-03 12:15
حاجی شریفی
مؤسس سایت
 
سلام
نقل قول نوشته شده توسط: booysusa
کثلا یک پوشه کنار برنامه به اسم Image و تصاویر آنجا ذخیره میشن ... میخوام با حذف سطر، عکس از اونجا هم حذف بشه

برای حذف فایل اول باید شیء Image که از فایل بارگذاری کرده بوده اید را Dispose کنید و سپس فایل را Delete کنید.
System.Drawing.Image img1;

...

if (img1 != null ) img1.Dispose();
یا
using (this .PictureBox1.Image) this .PictureBox1.Image = null ;
و..

سپس

string filePath = @"D:\file1.jpg";
System.IO.File.Delete(filePath) ;


نقل قول نوشته شده توسط: booysusa
... بررسی کردم سایت دانلود درست شده ...

سایت فعال است ولی دکمه دانلود کار نمیکند، البته دیگر مهم نیست، گمانم متوجه منظور و مشکل تان شدم.
1398-04-03 14:04
booysusa

 
نقل قول
سایت فعال است ولی دکمه دانلود کار نمیکند، البته دیگر مهم نیست، گمانم متوجه منظور و مشکل تان شدم.

بله الانمتوجه گفته شما شدم، درستش کردم
امکانش هست یه نگاه بهش بندازید
لینک دانلود

و اینکه یه کلاس برای نوشتن کدهای فرم مثلا کارت ملی درست کردم
الان میخوام Insert اون کلاس رو اینجا که یه کلاس دیگس فراخونی کنم
این خطا رو میدم


اینم نوشتم که شاید به داده های اون کلاس دسترسی پیدا کنم ولی نشد
Business.Mojodiatha.Govahiha govahiha = new Business.Mojodiatha.Govahiha() ;


اینم همون کلاسکارت ملی هست که میخوام جایی دیگه ازش استفاده کنم
1398-04-05 01:09
حاجی شریفی
مؤسس سایت
 
سلام
نقل قول نوشته شده توسط: booysusa
امکانش هست یه نگاه بهش بندازید

بله دانلود کردم، یک مشکل Reference چرخشی در سه پروژه تان دارید که در کامپایل و دیباگ مشکل ساز میشود و اذیت میکند.
سه فایل csproj اصلی تان را ویرایش کردم.
پیشنهاد میکنم فایل zip زیر را دانلود کنید و سه فایل آن را روی پروژه خودتان Replace کنید.
(سورس کدتان را خراب نمیکند)
ModiriatMatab-13980330-NEW-CSPROJ.zip 5KB

نقل قول نوشته شده توسط: booysusa
الان میخوام Insert اون کلاس رو اینجا که یه کلاس دیگس فراخونی کنم

برای فراخوانی متد یک کلاس دیگر باید نمونه ای از آن کلاس را new کنید و با متغییر نمونه، متدهای مورد نظر را فراخوانی کنید.
var x = new  Class2();
x.Func();

Business.Mojodiatha.Govahiha govahiha = new Business.Mojodiatha.Govahiha() ;
govahiha.InsertKartMeli() ;

شب خوش.
1398-04-05 11:33
booysusa

 
نقل قول
بله دانلود کردم، یک مشکل Reference چرخشی در سه پروژه تان دارید که در کامپایل و دیباگ مشکل ساز میشود و اذیت میکند.


سپاسگزارم
مشکلش چی بود مهندس؟ چون در برنامه های دیگه من هم قطعا باید این مشکل باشه

نقل قول
برای فراخوانی متد یک کلاس دیگر باید نمونه ای از آن کلاس را new کنید و با متغییر نمونه، متدهای مورد نظر را فراخوانی کنید.
var x = new Class2();
x.Func();

Business.Mojodiatha.Govahiha govahiha = new Business.Mojodiatha.Govahiha() ;
govahiha.InsertKartMeli() ;

بله این را انجام دادم ولی بازم مشکلم برطرف نشد
تصویر زیر از خطای گفته شده در برنامه
1398-04-05 13:09
حاجی شریفی
مؤسس سایت
 
سلام
نقل قول نوشته شده توسط: booysusa
...تصویر زیر از خطای گفته شده در برنامه...


منظورم آن بود که باید کلاس را new کنید و از متغییر شیء آن با نقطه جهت فراخوانی متدهایش استفاده کنید.
ولی شما نمیتوانید بدین شکل، متد را خارج آکولاد فراخوانی کنید.
همیشه یکسری الزامات وجود دارد که گفتگوی عادی شاید بیان نشود، مثلا Method های شما همیشه باید داخل یک Class/Struct باشد و یا Class های شما همیشه باید داخل یک namespace باشد و...
یعنی کد صحیح میتوانید چیزی شبیه این میشود...
namespace  abc
{
public class def
{
private Business.Mojodiatha.Govahiha govahiha = new Business.Mojodiatha.Govahiha() ;

public bool Insert()
{
return this .InsertContact() && govahiha.InsertKartMeli() ;
}

public bool InsertContact()
{
//...
}
}
}
1398-04-05 14:32
حاجی شریفی
مؤسس سایت
 
میبخشید، این سوال را یادم رفت پاسخ دهم
نقل قول نوشته شده توسط: booysusa
مشکلش چی بود مهندس؟

پروژه های و dll های شما میتوانند به یکدیگر ارجاع/Reference داشته باشند.
ولی نباید دور یا حلقه ایجاد کنند.
اگر A,B,C سه پروژه یا dll باشند، نمیشود که A از B ارجاع داشته باشد و B از C ارجاع داشته باشد و C از A ارجاع داشته باشد.

در پروژه شما DataAcess و Business هر دو از یکدیگر ارجاع داشتند که این مشکل ایجاد میکند.
من ارجاع DataAcess به Business را حذف کردم و در عوض از UI به هر دو ارجاع اضافه کردم.
1398-04-05 20:49
booysusa

 
نقل قول
یعنی کد صحیح میتوانید چیزی شبیه این میشود...
namespace abc
{
public class def
{
private Business.Mojodiatha.Govahiha govahiha = new Business.Mojodiatha.Govahiha() ;

public bool Insert()
{
return this .InsertContact() && govahiha.InsertKartMeli() ;
}

public bool InsertContact()
{
//...
}
}
}


بی نهایت سپاسگزارم بله همین را خواستم و درست شد




نقل قول
پروژه های و dll های شما میتوانند به یکدیگر ارجاع/Reference داشته باشند.
ولی نباید دور یا حلقه ایجاد کنند.
اگر A,B,C سه پروژه یا dll باشند، نمیشود که A از B ارجاع داشته باشد و B از C ارجاع داشته باشد و C از A ارجاع داشته باشد.

در پروژه شما DataAcess و Business هر دو از یکدیگر ارجاع داشتند که این مشکل ایجاد میکند.
من ارجاع DataAcess به Business را حذف کردم و در عوض از UI به هر دو ارجاع اضافه کردم.

بله چشم حتما رعایت می کنم
1398-04-08 14:19
booysusa

 
درود مهندس شریفی گرامی
کدهای اینسرت رو همونجوری که شما سناریوشو گفتید کامل نوشتم و همه چی درست پیش میره فقط تو اینسرت بخش مثلا کارت ملی که یه شی درست میکنم به مشکل بر خوردم

نقل قول
یعنی کد صحیح میتوانید چیزی شبیه این میشود...
namespace abc
{
public class def
{
private Business.Mojodiatha.Govahiha govahiha = new Business.Mojodiatha.Govahiha() ;

public bool Insert()
{
return this .InsertContact() && govahiha.InsertKartMeli() ;
}

public bool InsertContact()
{
//...
}
}
}




تصاویر (امیدوارم گویای مشکل من باشن )





















1398-04-08 22:59
حاجی شریفی
مؤسس سایت
 
سلام
طبق تصاویر شما، شیء Contact پر نشده و خالی/null است.
باید ببینید کجا Contact در سمت چپ مساوی بوده و قرار بوده پر شود.
Contact = یک چیزی ! ;

این کد "پرکردن" یا کلا اجرا نشده یا درست کار نکرده و شیء فوق را پر نکرده.
1398-04-09 19:23
booysusa

 
درود بر شما
نقل قول
این کد "پرکردن" یا کلا اجرا نشده یا درست کار نکرده و شیء فوق را پر نکرده.

بله من میخواهم شناسه یکتا را از جدول Contact بگیرم و در جدول Govahiha وارد کنم ولی نمی دانم چرا Contact.ID را پر نمی کند
در اصل Contact شی از کلاس Contact است و ID همان آیدی کلاس Conact هست و من با این کار میخواهم آیدی کلاس کانتکت را به جدول Govahiha پاس بدهم تا با این کار همان بحث RelatiopnShip انجام بشود

به این شکل است که فرم اول فقط اطلاعات مختصری از کاربر میگیرد و در ادامه با زدن دکمه تکمیل اطلاعات میتوانیم اطلاعات بیشتری از مشتری را وارد جدول ها کنیم

من با زدن دکمه ثبت اطلاعات در فرم اول، بصورت اتوماتیک شنایسه یکتا را در جدول Govahiha درج میکنم

برنامه من از چند کلاس استفاده می کند، یعنی برای هر جدول یک کلاس جدا نوشته ام، مثلا جدول کلاس Contact(که برای دریافت اطلاعات اولیه هست) جدول Govahiha(که برای دریافت اطلاعات مربوط به کارت ملی یا گواهی پزشکی یا... می باشد) و چندین جدول و کلاس دیگر

وقتی همه کدهای Insert را در یک کلاس می نویسم (منظورم همه کلاس ها در یک کلاس به نام Contact ) هیچ مشکلی پیش نمی آید و برنامه به درستی اطلاعات را در جدول ها درج می کند، ولی من میخواهم کلاس بندی کنم Insert Update Delete Read هر جدول را در کلاس مختص خودش وارد کنم، آن تصویر قبل که ارسال کردم مربوط به همان کلاس ها می باشد

این کد Insert از جدول Govahiha می باشد
public bool InsertKartMeli() // افزودن بخش کارت ملی
{
string command = @"INSERT into [Govahiha] (SerialKartMeli_KartMeli, NoeKartMeli, Contact_ID) " +
"values (@SerialKartMeli_KartMeli,@NoeKartMeli, @Contact_ID)";

List<SqlParameter> parametersList = new List<SqlParameter>();

var SerialKartMeli_KartMeliParameter = new SqlParameter("@SerialKartMeli_KartMeli", string.IsNullOrEmpty(this.SerialKartMeli_KartMeli) ? string.Empty : this.SerialKartMeli_KartMeli);
var NoeKartMeliParameter = new SqlParameter("@NoeKartMeli", NoeKartMeli ? 1 : 0);
var Contact_IDParameter = new SqlParameter("@Contact_ID", this.Contact.ID);

parametersList.Add(SerialKartMeli_KartMeliParameter);
parametersList.Add(NoeKartMeliParameter);
parametersList.Add(Contact_IDParameter);

var db = new DataAccess.DatabaseManager();
var result = db.ExecuteCommand(command, parametersList);
return result;
}


این همان کدی هست که آیدی یکتا از جدول Contact را به جدول Govahiha پاس میدهد
var Contact_IDParameter = new SqlParameter("@Contact_ID", this.Contact .ID )

این کد رو هم برای وارد کردن پروپرتی های کلاس Contact در کلاس Govahiha نوشتم
public Contact Contact { get; set; }

این تیکه کدهم مربوط به دکمه افزودن اطلاعات در فرم اولیه هست ، با زدن دکمه ثبت اطلاعات، به تمام جداولم یک کد یکتا ارسال می شود تا با هم ارتباط داشته باشند (نمی دونم استاندارد هست این روشم یا خیر؟؟؟ )
public bool Insert() // همه افزودن ها در این قسمت هست با استفاده از این تیکه کد همه افزودن ها عمل می کنند
{
return InsertContact() && govahiha.InsertKartMeli()
}
1398-04-10 03:18
حاجی شریفی
مؤسس سایت
 
سلام
نقل قول نوشته شده توسط: booysusa
... ولی نمی دانم چرا Contact.ID را پر نمی کند ...

با توجه به خطا، مشکل از ID نیست.
کل Contact پر نشده
خود Contact خالی/null است.

مانند آن است که یک "انباری" بخرید ولی هیچ وقت پرش نکرده باشید و حالا انتظار داشته باشید، "صندلی ای" در آن باشد.
مشکل از "صندلی" نیست، کل "انباری" خالی است !

اصلا جایی در کدتان Contact را پر کرده اید؟
یا فقط public Contact Contact { get; set; } را تعریف کرده و رهایش کرده اید؟
چه کسی و کدام کد باید Contact را پر کند؟
باید جایی در کدتان خود Contact در سمت چپ یک مساوی باشد و پر شده باشد
x.Contact = ??? ;
1398-04-10 14:05
booysusa

 
درود بر شما
نقل قول
کل Contact پر نشده

بله چون من تازه دارم دکمه ثبت اطلاعات میزنم

نقل قول
باید جایی در کدتان خود Contact در سمت چپ یک مساوی باشد و پر شده باشد

یعنی تازه دارم اطلاعات پاس میدم برای همین ID در جدول Contact چیزی توش نیست که من بخوام ازش جایی دیگه استفاده کنم

نقل قول
چه کسی و کدام کد باید Contact را پر کند؟

با زدن دکمه ثبت اطلاعات اولیه Contact پر میشود

این خط Insert هست که جدول Contact رو پر میکنه

public bool InsertContact()
{

string command = "INSERT into [Contact] (Name, NameKhanevadegi, NamePedar, Jensiat, Taahol, ShomarehMeli, ShomarehShenasnameh,"+
"TarikhTavalod, TarikhSodor, SerialShenasnameh, Telefon, Mobile, Tozihat ) OUTPUT INSERTED.ID values(@Name, @NameKhanevadegi, @NamePedar, " +
"@Jensiat, @Taahol, @ShomarehMeli, @ShomarehShenasnameh, @TarikhTavalod, @TarikhSodor, @SerialShenasnameh, @Telefon,"+
"@Mobile, @Tozihat)";
List<SqlParameter> parametersList = new List<SqlParameter>();

// اطلاعات شناسنامه
var NameParameter = new SqlParameter("@Name", this.Name);
var NameKhanevadegiParameter = new SqlParameter("@NameKhanevadegi", this.NameKhanevadegi);
var NamePedarParameter = new SqlParameter("@NamePedar", this.NamePedar);
var JensiatParameter = new SqlParameter("@Jensiat", Jensiat.ToString());
var TaaholParameter = new SqlParameter("@Taahol", Taahol.ToString());
var ShomarehMeliParameter = new SqlParameter("@ShomarehMeli", this.ShomarehMeli);
var ShomarehShenasnamehParameter = new SqlParameter("@ShomarehShenasnameh", this.ShomarehShenasnameh);
var TarikhTavalodParameter = new SqlParameter("@TarikhTavalod", Convert.ToDateTime(TarikhTavalod));
var TarikhSodorParameter = new SqlParameter("@TarikhSodor", Convert.ToDateTime(TarikhSodor));
var SerialShenasnamehParameter = new SqlParameter("@SerialShenasnameh", this.SerialShenasnameh);
var TelefonParameter = new SqlParameter("@Telefon", this.Telefon);
var MobileParameter = new SqlParameter("@Mobile", this.Mobile);
var TozihatParameter = new SqlParameter("@Tozihat", this.Tozihat);

parametersList.Add(NameParameter);
parametersList.Add(NameKhanevadegiParameter);
parametersList.Add(NamePedarParameter);
parametersList.Add(JensiatParameter);
parametersList.Add(TaaholParameter);
parametersList.Add(ShomarehMeliParameter);
parametersList.Add(ShomarehShenasnamehParameter);
parametersList.Add(TarikhTavalodParameter);
parametersList.Add(TarikhSodorParameter);
parametersList.Add(SerialShenasnamehParameter);
parametersList.Add(TelefonParameter);
parametersList.Add(MobileParameter);
parametersList.Add(TozihatParameter);

var db = new DataAccess.DatabaseManager();
ID = db.ExecuteCommandAndGetId(command, parametersList);

var imagesFolder = AppDomain.CurrentDomain.BaseDirectory + "Images\\";

if (!Directory.Exists(imagesFolder))
Directory.CreateDirectory(imagesFolder);

Directory.CreateDirectory(imagesFolder + ID);

return true;

}



این هم همون کدی هست که من با زدنش همه اطلاعات رو یکجا به دیتابیس ارسال میکنم یعنی هم در جدول Contact و در جدول Govahia اطلاعات رو پاس میدم با این تفاوت که در جدول Contact همه اطلاعات رو پر شده میگیردولی در جدول Govahiha هیچ چیزی ارسال نشده بجز همون آیدی یکتا جدول Contact

public bool Insert() // همه افزودن ها در این قسمت هست با استفاده از این تیکه کد همه افزودن ها عمل می کنند
{
return InsertContact() && govahiha.InsertKartMeli();
}
1398-04-11 10:19
حاجی شریفی
مؤسس سایت
 
سلام
خطای شما خیلی مشخص است و خطای معروفی در کلیه زبان های برنامه نویسی است.
و راحت و سریع هم قابل رفع است.

مثلا ، شاید در کد شما وقتی داخل InsertContact در حالی Insert اطلاعات هستید باید فیلد Contact را هم با کپی از اطلاعات پر کنید.
متغییر که خود به خود پر نمیشود، شما باید بگویید متغییر Contact را برابر فلان چیز قرار ده
تا این متغییر پر شود و بتوانید بعدا از مقادیر آن استفاده کنید.
حدس میزنم محل درست این پر شدن باید داخل تابع InsertContact باشد.
یعنی قبل یا بعد از Insert اطلاعات یک کپی از آن را هم در متغییر Contact قرار دهید تا دستورات و توابع بعدی بتوانند از این مقادیر استفاده کنند.

بدون دیدن کد کامل نمیتوانم قطعی بگویم ولی شاید کدی شبیه این در انتهای InsertContact نیاز داشته باشید.
public bool  InsertContact()
{
//...

this .Contact = new Contact()
{
ID = ID,
aaa = this.Name,
bbb = this.NameKhanevadegi,
ccc = this.NamePedar
};

return true ;
}



البته در یک خط از تابع InsertContact شما هم کدی قابل توجه وجود دارد:

ID = db.ExecuteCommandAndGetId(command, parametersList) ;


این متغییر ID در هیچ جایی داخل تابع تعریف نشده، پس حتما عمومی و در سطح کلاس تعریف شده.
اگر چنین باشد، شاید کد InsertKartMeli را هم چنین تغییر دهید کار کند

var Contact_IDParameter = new SqlParameter("@Contact_ID", this.Contact.ID) ;
var Contact_IDParameter = new SqlParameter("@Contact_ID", ID) ;


پر کردن یک متغییر که خالی نباشد یک جورهایی شبیه 2*2 برنامه نویسی است ... یعنی منظورم آن است که توضیح بیشترش سخت است و طور دیگری نمی توانم توضیح دهم.
بنظرم راه حل خوبی نیست ولی اگر نتوانستید حلش کنید ، سورس بدهید برایتان حل کنم

موفق باشید.