PDA

View Full Version : ویرایش اطلاعات یک رکورد در فرم دیگر



mohammad2407
یک شنبه 29 بهمن 1391, 18:03 عصر
سلام دوستان من میخوام وقتی روی یک رکورد در dataGridView کلیک کنم یک فرم باز بشه که بتونم در اون فرم اطلاعات ویرایش کنم 80 درصد یا بهتره بگم 95 درصد کار انجام دادم ولی عملیات ویرایش انجام نمیشه

کد من که در دکمه ( ویرایش) مینویسم

Form5 frm5 = new Form5();

if (PMessageBox.Show("آیا از ویرایش رکورد انتخاب شده اطمینان دارید؟", "ویرایش اطلاعات", PMessageBoxButtons.YesNoCancel, PMessageBoxIcons.Warning, PMessageBoxDefaultButtons.Button3, "فیلد ویرایش شده قابل بازگردانی نیست") == DialogResult.Yes)
{

string _name = txtname.Text;
string _lastname = txtlastname.Text;
string _car = txtcar.Text;
string _shnamber = txtshnamber.Text;
string _Datetahvil = txtdate.Text;
string _des = txtdes.Text;
var db = new tahvilDataContext();//ling to SQL new
int selectionchange_index_id = int.Parse(frm5.dataGridView1.CurrentRow.Cells["id"].Value.ToString());
var query = db.tahvils.Where(c => c.id == selectionchange_index_id).Single();
query.Name = _name;
query.LastName = _lastname;
query.Car = _car;
query.SHNamber = _shnamber;
query.tarikh = _Datetahvil;
query.Description = _des;
db.SubmitChanges();
frm5.dataGridView1.DataSource = db.tahvils;

}

و از قسمت

int selectionchange_index_id = int.Parse(frm5.dataGridView1.CurrentRow.Cells["id"].Value.ToString());

خطا میگیره

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

mhsmity
یک شنبه 29 بهمن 1391, 18:56 عصر
سلام یه کلاس برای سه عملیات اصلی درج ویرایش و حذف طراحی کن.
تو فرم اصلی یک شی از نوع استاتیک از کلاس تعریف کن
public static TblMain m;
خوب بنده نحوه کار یک کلاس رو برای شما توضیح نمی دم که چه جور یک سازنده متغییر های سطح کلاس رو مقدار دهی می کنه.
حالا برای فعال کردن دکمه ای ویرایش و حذف و اضافه در رویداد dgv_CellClick گریدویو کد زیر رو بنویس
private void dgv_CellClick(object sender, DataGridViewCellEventArgs e)
{
m = new TblMain(dgv, e.RowIndex);
CmdAdd.Enabled = true;
CmdUpDate.Enabled = true;
CmdDelete.Enabled = true;

یه مقدار کدهای سازنده کلاس TblMain رو برات می زارم تا ببینی که متغییر های سطح کلاس چه جور مقدار دهی می شوند.
Id = Convert.ToInt16(dgv.Rows[RowIndex].Cells["id"].Value.ToString());
Name = dgv.Rows[RowIndex].Cells["Name"].Value.ToString();
Family = dgv.Rows[RowIndex].Cells["Family"].Value.ToString();
Namefather = dgv.Rows[RowIndex].Cells["Namefather"].Value.ToString();
خوب کد دکمه ویرایش فرم ویرایش رو باز می کنه
private void CmdUpDate_Click(object sender, EventArgs e)
{
selectAction = "CmdUpDate";
FrmAdd f = new FrmAdd();
f.ShowDialog();
وقتی فرم ویرایش می خواد ولد به شه این کده رو داره
private void Laod()
{
id.Text = FrmMain.m.Id.ToString();
name.Text = FrmMain.m.Name;
family.Text = FrmMain.m.Family;
namefather.Text = FrmMain.m.Namefather;

mohammad2407
یک شنبه 29 بهمن 1391, 23:51 عصر
اصلا بحث این که چرا به این شکل کار نمیکنم نیست

اخه چرا کد خوده من کار نمیکنه ؟ کد من 100 درصد درست هست چون در برنامه در قسمت های دیگه استفاده کردم و میدونم 100 درصد عملی هست

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

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

mohammad2407
دوشنبه 30 بهمن 1391, 00:25 صبح
الان به صورت زیر در کلید قرار دادم ولی 25 تا خطا میگیره ... دیشب تا ساعت 5 روی یک مشکل دیگه کار کردم امشب هم باید روی این کار کنم .. خسته شدم :اشتباه:


public int id { get; set; }
private void button2_Click(object sender, EventArgs e)
{


if (PMessageBox.Show("آیا از ویرایش رکورد انتخاب شده اطمینان دارید؟", "ویرایش اطلاعات", PMessageBoxButtons.YesNoCancel, PMessageBoxIcons.Warning, PMessageBoxDefaultButtons.Button3, "فیلد ویرایش شده قابل بازگردانی نیست") == DialogResult.Yes)
{
var db = new tahvilDataContext();//ling to SQL new
var query = db.tahvils.Where(c => c.id == this.id).Single();
query.Name = txtname.Text;
query.LastName = txtlastname.Text;
query.Car = txtcar.Text;
query.SHNamber = txtshnamber.Text;
query.tarikh = txtdate.Text;
query.Description = txtdes.Text;
db.SubmitChanges();
}

}




ولی از قسمت زیر خطا میگیره

var query = db.tahvils.Where(c => c.id == this.id).Single();

mohammad2407
دوشنبه 30 بهمن 1391, 00:42 صبح
مشکل من ارسال اطلاعات از دیتا گرید به فرم ویرایش نیست مشکل من این هست که چرا عملیات ویرایش انجام نمیشه ؟

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

که مشکلی هم نداره!!

Form6 frm6 = new Form6();

frm6.txtname.Text = dataGridView1.CurrentRow.Cells["Name"].Value.ToString();
frm6.txtlastname.Text = dataGridView1.CurrentRow.Cells["LastName"].Value.ToString();
frm6.txtcar.Text = dataGridView1.CurrentRow.Cells["Car"].Value.ToString();
frm6.txtshnamber.Text = dataGridView1.CurrentRow.Cells["SHNamber"].Value.ToString();
frm6.txtdate.Text = dataGridView1.CurrentRow.Cells["tarikh"].Value.ToString();
frm6.txtdes.Text = dataGridView1.CurrentRow.Cells["Description"].Value.ToString();
frm6.txtrhg.Text = dataGridView1.CurrentRow.Cells["rhg"].Value.ToString();
frm6.txtTime.Text = dataGridView1.CurrentRow.Cells["Timepc"].Value.ToString();
frm6.txtDatee.Text = dataGridView1.CurrentRow.Cells["Datepc"].Value.ToString();
frm6.ShowDialog();

mohammad2407
دوشنبه 30 بهمن 1391, 01:54 صبح
دوستان خواهش میکنم راهنمایی کنید

Mahmoud.Afrad
دوشنبه 30 بهمن 1391, 03:18 صبح
در فرم edit (فرم6) یک پراپرتی به نام id تعریف کردید ولی چرا موقع نمایش این پراپرتی را مقداردهی نمیکنید؟
قبل از showdialog باید frm6.id رو هم مقداردهی کنید. مقدار id سطر انتخابی گرید رو به int تبدیل کرده در frm6.id قرار بدید. چیزی شبیه این:

...
frm6.id = Convert.ToInt32(dataGridView1.CurrentRow.Cells["id"].Value);
frm6.ShowDialog();

r_s1389@yahoo.com
دوشنبه 30 بهمن 1391, 08:02 صبح
سلام دوستان من میخوام وقتی روی یک رکورد در dataGridView کلیک کنم یک فرم باز بشه که بتونم در اون فرم اطلاعات ویرایش کنم 80 درصد یا بهتره بگم 95 درصد کار انجام دادم ولی عملیات ویرایش انجام نمیشه

کد من که در دکمه ( ویرایش) مینویسم

Form5 frm5 = new Form5();

if (PMessageBox.Show("آیا از ویرایش رکورد انتخاب شده اطمینان دارید؟", "ویرایش اطلاعات", PMessageBoxButtons.YesNoCancel, PMessageBoxIcons.Warning, PMessageBoxDefaultButtons.Button3, "فیلد ویرایش شده قابل بازگردانی نیست") == DialogResult.Yes)
{

string _name = txtname.Text;
string _lastname = txtlastname.Text;
string _car = txtcar.Text;
string _shnamber = txtshnamber.Text;
string _Datetahvil = txtdate.Text;
string _des = txtdes.Text;
var db = new tahvilDataContext();//ling to SQL new
int selectionchange_index_id = int.Parse(frm5.dataGridView1.CurrentRow.Cells["id"].Value.ToString());
var query = db.tahvils.Where(c => c.id == selectionchange_index_id).Single();
query.Name = _name;
query.LastName = _lastname;
query.Car = _car;
query.SHNamber = _shnamber;
query.tarikh = _Datetahvil;
query.Description = _des;
db.SubmitChanges();
frm5.dataGridView1.DataSource = db.tahvils;

}

و از قسمت

int selectionchange_index_id = int.Parse(frm5.dataGridView1.CurrentRow.Cells["id"].Value.ToString());

خطا میگیره

نمیدونم مشکل از کجا هست همه چی درسته ولی ویرایش نمیشه ؟؟؟
اگر شما میخوایید که اون رکورد رو که رو آن دابل کلیک کردید رو ویرایش کنید
به نظر من اینکه به یک فرم دیگه برید درست نیست
بهتر بید برای این کار از یک پنل استفاده کنید و وقتی روی رکورد مورد نظر دابل کلیک شد پنل نمایش داده بشه



private void button1_Click(object sender, EventArgs e)
{
//داخل این باتن هم یک نمونه آپدیت معمولی بنویس
panel1.Visible = false;
}
private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{

panel1.Visible = true;
textBox1.Text = dataGridView1.CurrentRow.Cells[2].Value. ToString();
textBox2.Text = dataGridView1.CurrentRow.Cells[5].Value. ToString();
}

http://uplod.ir/sac96uhzxyxb/Untitled.jpg.htmhttp://uplod.ir/sac96uhzxyxb/Untitled.jpg.htm

r_s1389@yahoo.com
دوشنبه 30 بهمن 1391, 08:14 صبح
اگر شما میخوایید که اون رکورد رو که رو آن دابل کلیک کردید رو ویرایش کنید
به نظر من اینکه به یک فرم دیگه برید درست نیست
بهتر بید برای این کار از یک پنل استفاده کنید و وقتی روی رکورد مورد نظر دابل کلیک شد پنل نمایش داده بشه



private void button1_Click(object sender, EventArgs e)
{
//داخل این باتن هم یک نمونه آپدیت معمولی بنویس
panel1.Visible = false;
}
private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{

panel1.Visible = true;
textBox1.Text = dataGridView1.CurrentRow.Cells[2].Value. ToString();
textBox2.Text = dataGridView1.CurrentRow.Cells[5].Value. ToString();
}

http://uplod.ir/sac96uhzxyxb/Untitled.jpg.htmhttp://uplod.ir/sac96uhzxyxb/Untitled.jpg.htm

این عکس رو هم ببینی بد نیستhttp://uplod.ir/sac96uhzxyxb/Untitled.jpg.htm
http://uplod.ir/sac96uhzxyxb/Untitled.jpg.htm

mohammad2407
دوشنبه 30 بهمن 1391, 14:06 عصر
در فرم edit (فرم6) یک پراپرتی به نام id تعریف کردید ولی چرا موقع نمایش این پراپرتی را مقداردهی نمیکنید؟
قبل از showdialog باید frm6.id رو هم مقداردهی کنید. مقدار id سطر انتخابی گرید رو به int تبدیل کرده در frm6.id قرار بدید. چیزی شبیه این:

...
frm6.id = Convert.ToInt32(dataGridView1.CurrentRow.Cells["id"].Value);
frm6.ShowDialog();

اقا محمود خیلی دوست دارم خیلی مردی !!

مشکل حل شد

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


Form5 frm5 = new Form5();
var db1 = new tahvilDataContext();
var tahvil_query = db.tahvils;
frm5.dataGridView1.DataSource = tahvil_query;

Mahmoud.Afrad
دوشنبه 30 بهمن 1391, 22:07 عصر
Form5 frm5 = new Form5();
var db1 = new tahvilDataContext();
var tahvil_query = db.tahvils;
frm5.dataGridView1.DataSource = tahvil_query;

این کد اشتباه است چون شئ جدید میسازید که با فرمی که باز هست فرق میکنه. این کد رو حذف کنید.

در فرمی که دیتاگرید توش هست یک تابع بنویسید به اینصورت:

public void UpdateDatagrid()
{
var db1 = new tahvilDataContext();
var tahvil_query = db.tahvils;
this.dataGridView1.DataSource = tahvil_query;
}

حالا در فرم دوم(فرم ادیت) بعد از انجام عمل آپدیت یعنی بعد از db.SubmitChanges(); باید تابع آپدیت فرم قبلی رو صدا بزنید:

(Application.OpenForms["Form5"] as Form5).UpdateDatagrid();

Form5 اسم کلاس فرم قبلی هست.