PDA

View Full Version : سوال: رفرش شدن datagridview و تغییر اطلاعات بدون تغییر موقعیت select



علی فتحی
شنبه 18 فروردین 1397, 01:53 صبح
سلام خیلی گشتم جواب قانع کننده پیدا نکردم تاپیک ایجاد کردم
من میخوام هنگام ویرایش یا خذف رکود در دیتاگرید تغییرات رفرش بشه ولی موقعیت انتخاب دیتاگرید فرق نکنه

مثلا با کد زیر کل فرم رفرش میشه و سلکت دیتاگرید در ایندکس 0 قرار میگیره


private void button2_Click(object sender, EventArgs e) {
this.delete();


ds = new DataSet();
SqlDataAdapter ad = new SqlDataAdapter("SELECT * FROM Table2", con);
//ad.Fill(ds, "Table2");
//dataGridView1.DataSource = ds;
//dataGridView1.DataMember = "Table2";
dataGridView1.Refresh();

علی فتحی
شنبه 18 فروردین 1397, 02:41 صبح
اینو پیدا کردم تقریبا درسته


int m = int.Parse(dataGridView1.CurrentRow.Index.ToString( ));
dataGridView1.CurrentCell = dataGridView1[0, m];

Mahmoud.Afrad
شنبه 18 فروردین 1397, 02:49 صبح
به نظر من اگر اطلاعات با موفقیت آپدیت شد فقط همون سطر را در دیتاست بروز کنید. برای حذف هم میتونید ردیف موردنطر را از منبع داده حذف کنید.

رامین مرادی
شنبه 18 فروردین 1397, 09:21 صبح
اینو پیدا کردم تقریبا درسته


int m = int.Parse(dataGridView1.CurrentRow.Index.ToString( ));
dataGridView1.CurrentCell = dataGridView1[0, m];

بله درسته منم از این روش استفاده میکنم.مهندس افراد هم نظرشون درسته ولی خب اگه برنامه تحت شبکه باشه برای دریافت آخرین اطلاعاتی که ممکنه سایر کاربران تغییر داده باشن بهتره یه سلکت دوباره انجام بشه.(البته فقط این نظر شخصیه)

علی فتحی
شنبه 18 فروردین 1397, 14:10 عصر
ممنون از دوستان ولی رفرش شدن فقط یک سطر مگر ممکن است؟
برنامه حسابداری تارا همچین کاری کرده هنگام ویرایش فقط سطر مورد نظر لحظه ای ویرایش میشه بدون لود دوباره فرم
و سلکت دیتاگرید درست سر جای خودش میمونه بدون تغییر این روش خیلی جالبه فقط کدش معلوم نیست چگونه هستش

البته با ویزار میشه اینکارو کرد و تغییرات را با endedit(); انجام داد ولی برنامه ویزاردی زیاد جالب نیست.وپیشنهاد برنامه نویسان حرفه ای استفاده نشه بهتره

رامین مرادی
یک شنبه 19 فروردین 1397, 09:20 صبح
ممنون از دوستان ولی رفرش شدن فقط یک سطر مگر ممکن است؟
برنامه حسابداری تارا همچین کاری کرده هنگام ویرایش فقط سطر مورد نظر لحظه ای ویرایش میشه بدون لود دوباره فرم
و سلکت دیتاگرید درست سر جای خودش میمونه بدون تغییر این روش خیلی جالبه فقط کدش معلوم نیست چگونه هستش

البته با ویزار میشه اینکارو کرد و تغییرات را با endedit(); انجام داد ولی برنامه ویزاردی زیاد جالب نیست.وپیشنهاد برنامه نویسان حرفه ای استفاده نشه بهتره
بله ممکنه.
شما که داده های جدید رو تو سطر وارد کردید خب. و دکمه ذخیره رو زدید دیتابیس شما بروز شد . تو این حالت شما دیگه نیازی به سلکت اون ردیف ندارید چون خود داده جدید الان اونجا هست. اگه هم میخواید سلکت کنید بر حسب کلید اون ردیف سلکت کنید و داده های جدید رو تو اون سطر جایگزین کنید.

علی فتحی
شنبه 12 خرداد 1397, 03:03 صبح
نشد جواب نگرفتم تا زمانی که فرم رو لود نکنی تغییرات نشون داده نمیشه
برنامه رافع هم هنچین کاری کرده اگر دوستان کار کرده باشند به محض حذف سلکت در ردیف بعدی قرار میگیره
یا با ویرایش همون لحظه تغییرات نشون داده میشه

Mahmoud.Afrad
شنبه 12 خرداد 1397, 04:13 صبح
اگر از bindingSource استفاده کنید تغییرات دیتاتیبل همان لحظه در دیتاگرید نمایش داده میشود.

Shadow_net
شنبه 12 خرداد 1397, 06:08 صبح
اگر از bindingSource استفاده کنید تغییرات دیتاتیبل همان لحظه در دیتاگرید نمایش داده میشود.
سلام. میشه بگید با چه کدی میتونم اینکار رو انجام بدم؟ آخه من بعد از ویرایش و حذف fill میکنم
ممنون

علی فتحی
سه شنبه 03 اردیبهشت 1398, 21:51 عصر
int mm = int.Parse(label1.Text);
dataGridView1.Rows[mm].Cells[0].Selected = true;

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

رامین مرادی
چهارشنبه 04 اردیبهشت 1398, 08:44 صبح
int mm = int.Parse(label1.Text);
dataGridView1.Rows[mm].Cells[0].Selected = true;

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

وقتی سطری رو تغییر میدید بقیه سطرها مقادیرشون به اون وابسته هست؟
اگه نه شما چرا دوباره اطلاعت رو لود میکنید!. اطلاعات جدید رو که تو سطر وارد کردید و داره نشون میده .شما فقط باید یه بار تو پس زمینه آپدیت رو انجام بدید. همین. دیگه رفرش نکنید.

علی فتحی
یک شنبه 09 آذر 1399, 22:06 عصر
نشددددددددددددددددددددددد ددددددددددددددددددددددددد دوستان نگرتید من چی میخوتم:ناراحت:

ROSTAM2
دوشنبه 10 آذر 1399, 08:25 صبح
سلام به همه. بعد از این همه تقلا یک بار هم، ذخیره مقدار Indix انتخاب شده در یک متغیر عمومی و یا هر روشی که براتون کاربردی تر هست رو امتحان کنید.
(بعد از ریفرش کردن اطلاعات،برای انتخاب مجدد ردیف انتخاب شده؛ مقدار ایندکس ذخیره شده رو استفاده کنید.)

علی فتحی
جمعه 17 دی 1400, 00:14 صبح
اومدین خط اول مهندس جان

Mahmoud.Afrad
شنبه 18 دی 1400, 08:51 صبح
سلام به همه. بعد از این همه تقلا یک بار هم، ذخیره مقدار Indix انتخاب شده در یک متغیر عمومی و یا هر روشی که براتون کاربردی تر هست رو امتحان کنید.
(بعد از ریفرش کردن اطلاعات،برای انتخاب مجدد ردیف انتخاب شده؛ مقدار ایندکس ذخیره شده رو استفاده کنید.)

اندیس رو قبلش بگیرید و بعد از آپدیت و گرفتن مجدد اطلاعات و نمایش اون، currentrow را به همون اندیس ست کنید و با ست کردن FirstDisplayedScrollingRowIndex به اون سطر اسکرول کنید. (خطاهای احتمالی رو باید هندل کنید)

ولی
من باشم این کار رو نمیکنم.
شما سطر مورد نظر رو داری میتونی همون سطر رو در دیتاتیبل تغییرش بدی یا حذف کنی یا ...
یا دیتاتیبل را بایند کنی به دیتاگرید و کنترلهایی مثل تکست باکس و ... که با تغییر مقدار اونها ، سطر دیتاگرید هم تغییر کنه و با آپدیت دیتابیس هم دیتا ثبت بشه.

silver189
دوشنبه 20 دی 1400, 15:45 عصر
foreach (DataGridViewRow row in dataGridView1.Rows)
{
int num = Convert.ToInt32(آیدی ردیف دیتاگرید);
if (Convert.ToString(dataGridView1.Rows[row.Index].Cells[1].Value) == num.ToString())
{
dataGridView1.Rows[row.Index].Selected = true;
dataGridView1.FirstDisplayedScrollingRowIndex = row.Index;
}
}