PDA

View Full Version : سوال: چطور در یک دکمه هم ثبت انجام شود و هم ویرایش



lahtagolfa
جمعه 23 دی 1390, 13:15 عصر
دوباره سلام
توی این فرم وقتی اطلاعات ثبت می شه تو datagrid نشون می ده وقتی کاربر روی یه سطر کلیک می کنه و دکمه ویرایش رو می زنه اطلاعات اون سطر وارد textbox ها می شه حالا می خوام وقتی دکمه ثبت رو می زنم ویرایش اطلاعات ثبت بشه نه اینکه یه سطر جدید اضافه بشه چی کار باید بکنم؟



80698

Hybrid
جمعه 23 دی 1390, 13:22 عصر
سلام ،

روشی که خودم همیشه استفاده میکنم اینه که وقتی که کاربر روی دکمه ی ویرایش کلیک میکنه دکمه ثبت رو Disable میکنم و خصوصیت Text دکمه ی ویرایش رو به ثبت ویرایش تغییر میدم و توسط دستور if دستورات مختلف رو بهش میدم...یعنی با یه دستور if میگم اگر خاصیت text دکمه ی ویرایش برابر ویرایش بود فیلد های سطر جاری رو به تکست باکس ها انتقاب بده در خیر این صورت بیا اطلاعات رو ویرایش کن..

موفق باشید./

lahtagolfa
جمعه 23 دی 1390, 13:58 عصر
سلام ،

روشی که خودم همیشه استفاده میکنم اینه که وقتی که کاربر روی دکمه ی ویرایش کلیک میکنه دکمه ثبت رو Disable میکنم و خصوصیت Text دکمه ی ویرایش رو به ثبت ویرایش تغییر میدم و توسط دستور if دستورات مختلف رو بهش میدم...یعنی با یه دستور if میگم اگر خاصیت text دکمه ی ویرایش برابر ویرایش بود فیلد های سطر جاری رو به تکست باکس ها انتقاب بده در خیر این صورت بیا اطلاعات رو ویرایش کن..

موفق باشید./

ببخشید من از گفته شما اینطوری برداشت کردم که کدم شکل زیر می شه ولی اشتباهست می تونید از روی کد برام بگید.



private void Editbutton_Click(object sender, EventArgs e)

{

if (ClasscodetextBox.Text == "")

{

if (ClassdataGridView.SelectedRows.Count == 0)

{

MessageBox.Show(".کالای مورد نظر را برای ویرایش انتخاب کنید");

}

else

{

data.classcode =

Convert.ToString(ClassdataGridView.SelectedCells[0].Value);

data.capacity =

Convert.ToString(ClassdataGridView.SelectedCells[1].Value);


ClasscodetextBox.Text = data.classcode;

CapacitytextBox.Text = data.capacity;

}

}

else

{

Registerbutton.Enabled =

false;


this.Editbutton.Text = " ثبت ویرایش";

data1.Update(data.classcode, data);



MessageBox.Show(".اطلاعات کلاس با موفقیت ثبت شد");

ClassdataGridView.DataSource = data1.GetFilledDataSource(

classFilterBy.classcode, ClasscodetextBox.Text);

FormDataClear();

SetDataGridViewSettings();

}

}

shadi khanum
شنبه 24 دی 1390, 12:46 عصر
ببین دوست عزیز تو اینجور مسائل راه درست اینع که برای فرمت یه ویژگی formMode در نظر بگیری.. وقتی کاربر دکمه ویرایش رو میزنه فرم به mode ویرایش میره و اطلاعات اون ردیف گرید رو توی textboxهای بالا نشون میده.. حالا وقتی دکمه ثبت زده بشه بر اساس اینکه فرمت تو چه modeیه عملیات update یا Insert انجام میدی... تو اینجور فرم ها بهتره که برای اضافه کردن رکورد هم یه دکمه بذاری به اسم اضافه و وقتی اونو کلیک کرد فرمت به mode اضافه کردن بره و توی دکمه ثبت چک کنی اگه mode اضافه بود insert کنی و اگه mode ویرایش بود update انجام بدی

s3rv3r
شنبه 24 دی 1390, 13:37 عصر
تو يه دكمه راحت كارتو انجام بده
قبلا اينكه درج كني يه سرچ انجام بده كه اگه اون كد كلاس موجود بود عمليات ويرايش انجام بشه بر اسا كل كلاس
اگه اون كد كلاس موجود نبود خب درج كنه.

uniqueboy_ara
شنبه 24 دی 1390, 14:01 عصر
شما با یه متغییر bool و مقدار دهی به اون در زمان های معین، به راحتی میتونی این کار رو انجام بدی
این پروژه ای که گذاشتم کارتو راه میندازه

shadi khanum
شنبه 24 دی 1390, 16:01 عصر
راهی که دوستمون گفته درسته ولی این در شرایطی که صرفا بخوای دو تا کار با این دکمه انجام بدی.. اگه حذف هم با همین دکمه بخوای انجام بدی دیگه متغیر bool به کارت نمیاد.. کلا به فرم هایی که یه دکمه توشون قرار بر اساس شرایط مختلف کارای مختلفی انجام بده ModeBase Form میگن و واسه اینکه بتونی مثلا حذف رو هم با همین دکمه میدیرت کنی مجبوری که یه enumeration تعریف کنی که مد های مختلفی که فرمت میتونه داشته باشه رو توش تعریف کنی و حالا تو دکمه ثبت بر اساس اینکه تو چه مدی هستی کار مورد نظرت رو انجام بده
موفق باشی

Sirwan Afifi
شنبه 24 دی 1390, 16:19 عصر
بهتره یه متغیر Public توی فرمت تعریف کنی به این شکل :
public bool isUpdate = false;

بعد توی فرم لود متغیر بالا رو چک کن که اگر True بود به قول دوستمون دکمه Update رو Enable کنه و در غیر این حالت دکمه Insert رو Enable کنه :

if (isUpdate)
{
btn_Insert.Enabled = false;
btn_Update.Enabled = true;
txt_movieID.Text = "";
txt_movieID.Enabled = true;
OleDbConnection con = new OleDbConnection(@"provider= microsoft.jet.oledb.4.0;" + "data source=" + Application.StartupPath + @"\data\db.mdb");
DataSet ds = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter("select *from Movies where MovieID='" + idtoUpdate + "'", con);
da.Fill(ds, "Movies");
DataRow drow = ds.Tables["Movies"].Rows[0];
txt_casts.Text = drow["Casts"].ToString();
txt_director.Text = drow["DirectorName"].ToString();
txt_duration.Text = drow["Duration"].ToString();
txt_genre.Text = drow["Genre"].ToString();
txt_medium.Text = drow["Medium"].ToString();
txt_movieID.Text = drow["MovieID"].ToString();
txt_plot.Text = drow["PlotOutLine"].ToString();
txt_product.Text = drow["Country"].ToString();
txt_season.Text = drow["Season"].ToString();
txt_title.Text = drow["Title"].ToString();
txt_yaer.Text = drow["Sal"].ToString();
txt_file.Text = drow["cover"].ToString();
//pictureBox1.Load(txt_file.Text);
pictureBox1.Image = Image.FromFile(Application.StartupPath+"\\"+ txt_file.Text);
txt_movieID.Enabled = false;
num_no.Value = Convert.ToDecimal(drow["DiscsNo"]);
if (drow["season"].ToString() == "film")
cmb_season.SelectedIndex = 0;
else
cmb_season.SelectedIndex = 1;
}

else
{
btn_Insert.Enabled = true;
btn_Update.Enabled = false;
OleDbConnection con = new OleDbConnection();
con.ConnectionString = @"provider= microsoft.jet.oledb.4.0;" + "data source=" + Application.StartupPath + @"\data\db.mdb";
con.Open();
OleDbCommand cmd = con.CreateCommand();
cmd.CommandText = "Select MovieID From Movies";
OleDbDataReader dr = cmd.ExecuteReader();
if (txt_movieID.Text == "")
txt_movieID.Text = "0";
while (dr.Read())
{
if (Convert.ToInt32(txt_movieID.Text) < Convert.ToInt32(dr["MovieID"].ToString()))
txt_movieID.Text = dr["MovieID"].ToString();
}
txt_movieID.Text = Convert.ToString(Convert.ToInt32(txt_movieID.Text) + 1);
con.Close();
}

کد بالا اول میاد شرط Update بودن رو چک می کنه اگر True بود اطلاعات ID موردنظر رو توی TextBox های مربوطه نشون میده در غیر اینصورت آخرین ID رو یه واحد بهش اضافه می کنه.

Only_god
شنبه 24 دی 1390, 23:04 عصر
سلام دوست عزیر
یک روش بسیار ساده که خودم هم استفاده می کنم این است که وقتی در دیتا گرید رو فیلد مورد نظر برای ویرایش کلیک کردی وارد text box ها شد ویرایش رو که انجام دادی روی دکمه ویرایش بزن سپس ویرایش در بانک انجام میشه یعنی دکمه ویرایش و ثبت دو دکمه جداگانه از هم باشند(به همین صورتی که در فرم نشان داده شده)

ya30ien2
شنبه 24 دی 1390, 23:16 عصر
منم با اون دوستمون که گفتن قبل از ثبت سرچ کنه موافقم
اول شما کد کلاس رو سرچ میکنی اگه موجود بود که ویرایش میکنی و اگه وجود نداشت اضافه میکنی
فکر میکنم راهتر از بقیه راها باشه

Sirwan Afifi
شنبه 24 دی 1390, 23:36 عصر
منم با اون دوستمون که گفتن قبل از ثبت سرچ کنه موافقم
اول شما کد کلاس رو سرچ میکنی اگه موجود بود که ویرایش میکنی و اگه وجود نداشت اضافه میکنی
فکر میکنم راهتر از بقیه راها باشه

به نظر من این روش اصلا بهینه نیست،