1398-06-12 10:12 بستن کد ویرایش پس از انجام ویرایش
booysusa

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

باید چه کنم؟
مشکل از کجاست؟

برنامه سه لایه
ویژوال استودیو
سی شارپ
اس کیو ال

تصویر اول


تصویر دوم


کد ExecuteCommand هم این هست
public bool ExecuteCommand(string command, List<SqlParameter> parameters)
{
SqlConnection myConnection = new SqlConnection();
myConnection.ConnectionString = connectionString;
SqlCommand myCommand = new SqlCommand();
myCommand.Connection = myConnection;
myCommand.CommandText = command;

foreach (SqlParameter param in parameters)
{
myCommand.Parameters.Add(param);
}

try
{
myConnection.Open();
int result = myCommand.ExecuteNonQuery();
myConnection.Close();
if (result > 0)
{
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
return false;
}
}
1398-06-13 00:01
حاجی شریفی
مؤسس سایت
 
سلام
مهم همان کدهای آغازین است...
همان start که این عمل شروع میشود، در همان نقطه میتوانید با تغییراتی ، کار دلخواه تان را انجام دهید.
( کد دوم (تصویر) و کد سوم که قرار داده اید ، مهم نیستند. )

نمیدانم ویرایش را در یک پنجره جدید (new) که بازشده انجام میدهید یا در همان پنجره اول انجامش میدهید.
این مورد را میتوانید در همان فرمی که گریدتان روی آن قرار دارد حل کنید.
یا بعد عملیات گرید را از select خارج کنید و یا متغییر ضمینه ای اگر دارید ، آن متغییر را خالی کنید.

مثلا اگر کد اولی که قرار داده اید در فرم اول قرار دارد، تغییری شبیه این اعمال کنید.

private int  ID_HesabMoshtariToEdit = 0 ;

private int btnEditHesab_HesabMoshtaro_Click(...
{
if (this .ID_HesabMoshtariToEdit <= 0) return ;

//...
// کل کدهای قبلی این تابع
//...

this .ID_HesabMoshtariToEdit = 0;
}


اگر کد اولی تان هم در فرم دیگری قرار دارد که برای ویرایش باز شده ، تغییر فوق فایده ندارد.
در این صورت میتوانید در همان کد ویرایش در فرم اول ،پس از انجام عملیات برای اولین بار گرید را از select خارج کنید.
this .DataGridView1.ClearSelection() ;


در صورتیکه مشکل تان حل نشد ، کدهایی که این عملیات را در فرم اول (همان فرمی که گرید روی آن قرار دارد) شروع میکند را اینجا قرار دهید.
موفق باشید.
1398-06-16 11:26
booysusa

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

مهندس فقط یه چیزی ، میخوام با زدن روی لینک و یا یکی از سطرها در دیتا گرید ویو، سایت باز بشه، چیکار باید کنم؟
1398-06-17 00:03
حاجی شریفی
مؤسس سایت
 
سلام
برای رویداد کلیک کدنویسی کنید و آدرس را از لینک گرفته به تابع System.Diagnostics.Process.Start بدهید ...
System.Diagnostics.Process.Start( "http://simorgh.hajisharifi.ir" ) ;
1398-06-17 09:50
booysusa

 
درود
بله این کد رو برای زمانی استفاده میکنم که Button داشته باشم ولی الان من میخوام از طریق گرید ویو باز کنم سایت رو
و اینکه آدرس رو خود کاربر به گرید میده و بعدا با سرچ نام سایت ادرس میاد بالا و میخوام با زدن روی ادرس یا زدن روی مشاهده سایت در مرورگر بیاد بالا
1398-06-19 14:03
booysusa

 
درود
مهندس شریفی گرامی این کدی بود که دنبالش بودم
private void DataGridView2_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex==2)
{
System.Diagnostics.Process.Start(dataGridView2[e.ColumnIndex,e.RowIndex].Value.ToString());
}
}


فقط دو نکته
نکته اول: من قبلا از همچین کدی استفاده می کردم ولی الان یادم نیست، چطوری بجای نوشتن 2 نام سلول رو وارد کنم (نام سلول این هست ClmnNameSite)
dgvSite.CurrentRow.Cells["ClmnNameSite"].Value.ToString()

نکته دوم: اگر بخوام یک دکمه بزارم که همه سایت های سلول های شماره 2 رو باز کنه چی باید بنویسم؟
1398-06-20 08:29
booysusa

 
نکته اولم جوابشو پیدا کردم: به جای عدد اندیس 2 کد پائین رو نوشتم

dataGridView1.Columns["ClmnNameSite"].Index

فقط سوال دومم در مورد : یک دکمه بزارم که همه سایت های سلول های شماره 2 رو باز کنه چی باید بنویسم؟
1398-06-21 13:45
حاجی شریفی
مؤسس سایت
 
سلام
میبخشید گرفتار و بیمار بودم...
در خصوص اصل کلیک که مشکل تان حل شد.
private void  DataGridView1_CellClick(object  sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex != 2) return ;
string link = this .dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value as string ;
if (string .IsNullOrEmpty(link)) return ;
System.Diagnostics.Process.Start(link);
}


و اما در مورد باز کردن یکجا همه لینک ها، طبیعتا با یک حلقه for/foreach میتوانید.
اگر این حلقه را روی همان obj که DataSource اصلی خود DataGridView هم است قرار دهید که خیلی بهتر است...
چیزی شبیه این:
//private List<***> dataSource ; 
//this.dataSource = fill from DB
//this.dataGridView1.DataSource = dataSource ;

foreach (var row in dataSource)
{
System.Diagnostics.Process.Start(row.WEBSITE_FIELD_NAME);
}


ولی میتوانید با for روی dataGridView.Rows[ i ].Cells[2].Value هم انجام دهید.
ولی روش قبل بهتر است.
موفق باشید.
1398-06-26 20:15
booysusa

 
درود و سپاس بابت توضیحات

مهندس من یک باتون درست کردم برای این کار که مثلا بزنم رو باتون ، باز بشه همه سایت ها
کدش همونی هست که شما گفتید؟
نقل قول
اگر این حلقه را روی همان obj که DataSource اصلی خود DataGridView هم است قرار دهید که خیلی بهتر است...


تصویری از محیطش


من دیتاسورس رو اینجوری وصل نمی کنم مهندس
نقل قول
//private List<***> dataSource ;
//this.dataSource = fill from DB
//this.dataGridView1.DataSource = dataSource ;


1398-06-29 11:23
حاجی شریفی
مؤسس سایت
 
سلام
نقل قول نوشته شده توسط: booysusa
من دیتاسورس رو اینجوری وصل نمی کنم مهندس

مهم نیست !
اتفاقا دقت کنید خیلی نمادین نوشتم ... fill from DB ... یعنی هر کدی که دارید.
بالاخره dataGridView1.DataSource را با یک چیزی پر میکنید.
اگر در یک متغییری جداگانه نداریدش در یک متغییر مستقل نگاهش دارید و از foreach روی عناصرش برای انجام کار روی همه سطرها استفاده کنید.