PDA

View Full Version : سوال: کنترل دیتا گرید ویو از داخل فرمی دیگر



alirezamli
سه شنبه 25 مرداد 1390, 15:35 عصر
با سلام خدمت تمام دوستان
برای ویرایش اطلاعات بانکم ابتدا آن ها را تو فرم 1 جستجو می کنم و نتایج را تو یک DataGridView نمایش میدم بعد با کلیک بر روی رکورد پیدا شده وارد فرم 2 میشم و اطلاعات DataGridView را داخل TextBox نمایش میدم و کاربر آنها را ویرایش می کند.حالا سوالی که دارم اینه که چطور می تونم زمانی که از فرم 2 به فرم 1 برگشتم اطلاعات ویرایش شده را داخل DataGridView نمایش بدهم(نمی خوام از دستور Select استفاده کنم چون تمام رکوردها را بر می گردونه فقط می خوام همان رکوردهایی که در نتیجه جستجو بر گردانده شد ، نمایش داده بشه و همچنین رکورد ویرایش شده Select شده باشد)

morteza271
سه شنبه 25 مرداد 1390, 15:48 عصر
به کد زیر نگاه کنید :
Form2 frm = new Form2();
frm.ShowDialog();
// Your Code For Refresh DataGridView.
بعد از اینکه فرم بسته شود گریدتون رو میتونید رفرش کنید.

alirezamli
سه شنبه 25 مرداد 1390, 16:32 عصر
به کد زیر نگاه کنید :
Form2 frm = new Form2();
frm.ShowDialog();
// Your Code For Refresh DataGridView.
بعد از اینکه فرم بسته شود گریدتون رو میتونید رفرش کنید.

دوست عزیز ممنون از توجهتون ولی فکر کنم منظورم را خوب نرسوندم
من اطلاعات سلول های دیتا گرید ویو را که داخل فرم 1 هست داخل متغیر های سراسری می ریزم بعد به تکست باکس هایی که تو فرم 2 هستند منتقلشون می کنم و بعد از انجام تغییرات ، عملیات Update را بر روی بانک انجام میدم و هیچ مشکلی تو این قسمت ندارم فقط می خوام زمانی که از فرم 2 برگشتم ( فرم 2 Close شد) اطلاعات ویرایش شده تو DataGridView هم نمایش داده بشه و DataGridView دقیقاً به همان شکل اولیه اش باشد (زمانی که از فرم 1 وارد فرم 2 شدم)-با تشکر

morteza271
سه شنبه 25 مرداد 1390, 16:36 عصر
من منظورتون رو متوجه شدم!!
شما لطف کنید کدی که با اون توی فرم اولتون سرچ میکنید رو بذارین اینجا تا کدی که لازمه برای این کار رو براتون بذارم.
شما چجوری سرچ رو انجام میدین؟
دکمه خاصی زده میشه و یا چیز دیگه ای؟
به این سوالات جواب بدین تا بهتون بگم چیکار کنید...

alirezamli
سه شنبه 25 مرداد 1390, 17:52 عصر
این کد مربوط به جستجو هست که داخل TextChanged ، تکست باکس ها می نویسم :

try
{
SerInfoClass.Initial();
SqlDataAdapter MyDataAdapter = new SqlDataAdapter("InfoSearch", SerInfoClass.ObjCon);
//Set the command type as StoredProcedure.
MyDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
//Create and add a parameter to Parameters collection for the stored procedure.
MyDataAdapter.SelectCommand.Parameters.Add(new SqlParameter("@Onvan", SqlDbType.NVarChar, 70));
MyDataAdapter.SelectCommand.Parameters.Add(new SqlParameter("@Mozo", SqlDbType.NVarChar, 120));
MyDataAdapter.SelectCommand.Parameters.Add(new SqlParameter("@Shomare", SqlDbType.NVarChar, 10));


MyDataAdapter.SelectCommand.Parameters["@Onvan"].Value = (txtOnvan.Text).Trim();
MyDataAdapter.SelectCommand.Parameters["@Mozo"].Value = (txtMozo.Text).Trim();
MyDataAdapter.SelectCommand.Parameters["@Shomare"].Value = (txtShomare.Text).Trim();


DataSet DS = new DataSet();


MyDataAdapter.Fill(DS, "InfoSearch");


dgvSearch.DataSource = DS;
dgvSearch.DataMember = "InfoSearch";

MyDataAdapter.Dispose();
SerInfoClass.ObjCon.Close();
}

catch (Exception ex)
{
MessageBox.Show(ex.Message);
}



بعد از پیدا شدن رکورد مورد نظر اونو انتخاب می کنم و روی دکمه ویرایش کلیک میکنم که کدش به صورت زیر:

EditNameVarede frmEdit = new EditNameVarede();

GlobalVariable.Header = dgvSearch.CurrentRow.Cells["Onvan"].Value.ToString().Trim();
GlobalVariable.Topic = dgvSearch.CurrentRow.Cells["Mozo"].Value.ToString().Trim();
GlobalVariable.Number = dgvSearch.CurrentRow.Cells["Shomare"].Value.ToString().Trim();

frmEdit.Show();

بعد داخل رویداد Load فرم 2 (EditNameVarede) دستورات زیر را می نویسم :
txtTopic.Text = GlobalVariable.Topic;
txtHeader.Text = GlobalVariable.Header;
txtNumber.Text = GlobalVariable.Number;

morteza271
سه شنبه 25 مرداد 1390, 19:03 عصر
اگه به صورت زیر عمل کنید درست میشه :
EditNameVarede frmEdit = new EditNameVarede();

GlobalVariable.Header = dgvSearch.CurrentRow.Cells["Onvan"].Value.ToString().Trim();
GlobalVariable.Topic = dgvSearch.CurrentRow.Cells["Mozo"].Value.ToString().Trim();
GlobalVariable.Number = dgvSearch.CurrentRow.Cells["Shomare"].Value.ToString().Trim();

frmEdit.ShowDialog();

txtSearch_TextCHanged(null, null);
یعنی فرم ویرایش رو با ShowDialog() باز کنید و بعدش تایع TextChanged تکست باکس سرچتون رو صدا بزنید.
موفق باشید

alirezamli
سه شنبه 25 مرداد 1390, 23:25 عصر
اگه به صورت زیر عمل کنید درست میشه :
EditNameVarede frmEdit = new EditNameVarede();

GlobalVariable.Header = dgvSearch.CurrentRow.Cells["Onvan"].Value.ToString().Trim();
GlobalVariable.Topic = dgvSearch.CurrentRow.Cells["Mozo"].Value.ToString().Trim();
GlobalVariable.Number = dgvSearch.CurrentRow.Cells["Shomare"].Value.ToString().Trim();

frmEdit.ShowDialog();

txtSearch_TextCHanged(null, null);
یعنی فرم ویرایش رو با ShowDialog() باز کنید و بعدش تایع TextChanged تکست باکس سرچتون رو صدا بزنید.
موفق باشید



با تشکر از شما دوست عزیز راهنماییتون خوب بود فقط الآن دو تا مشکل وجود داره :
1 – اگر به عنوان مثال جستجوی من بر اساس عنوان باشه بعد توی ویرایش ، عنوان عوض بشه زمان برگشت به فرم 1 اون رکورد دیگه نمایش داده نمیشه.
2 – اگر از بین چند رکورد حاصل از جستجو به عنوان مثال از بین 5 رکورد، رکورد سوم را برای ویرایش انتخاب کنم زمانی که به فرم 1 بر می گردم اون رکورد از حالت Select خارج شده و به جای آن رکورد اول Select میشه.

morteza271
سه شنبه 25 مرداد 1390, 23:34 عصر
1- خوب وقتی عنوانش عوض شه و در شرایط جستجو صدق نکنه بایدهم دیگه نمایش داده نشه،پس برنامه درست کار میکنه و شما میتونید برای اینکه سطری که ویرایش شده رو هم نشون بده همه سطرها رو دوباره نشون بدین یعنی متن تکست باکس سرچ رو خالی کنید تا همه سطرها نمایش داده بشن!

2- برای این کار در زمانی که کلید ویرایش زده میشه و فرم 2 رو باز میکنید شماره سطر انتخاب شده رو در یه متغیر عمومی در فرم 1 بریزین و کد زیر رو بنویسین:
EditNameVarede frmEdit = new EditNameVarede();

GlobalVariable.Header = dgvSearch.CurrentRow.Cells["Onvan"].Value.ToString().Trim();
GlobalVariable.Topic = dgvSearch.CurrentRow.Cells["Mozo"].Value.ToString().Trim();
GlobalVariable.Number = dgvSearch.CurrentRow.Cells["Shomare"].Value.ToString().Trim();

frmEdit.ShowDialog();

txtSearch_TextCHanged(null, null

DataGridView1.Rows[SelectRow].Selected = true;
موفق باشید