PDA

View Full Version : رفرش ديتاگريدپس از تغييرات



maryamgol
شنبه 15 آبان 1389, 07:33 صبح
بعد از اينكه تغييرات را در پايگاه داده اعمال مي كنيم(درج-حذف-ويرايش).چه كدي بنويسيم تا بدون اينكه فرم بسته شود ديتاگريد رفرش شود و تغييرات را نمايش دهد؟

ایمان مدائنی
شنبه 15 آبان 1389, 07:42 صبح
شما مي توني متدي كه داتاگريد ويو رو پر ميكنه دوباره صدا بزني

maryamgol
شنبه 15 آبان 1389, 07:46 صبح
ممنون از لطفتون.
متد Form_load را صدا ميزنم كه خوبه اما مي خوام وقتي ركوردي ويرايش شده روي همان ركورد قرار بگيره نه ركورد اول.

csharpprogramer88
شنبه 15 آبان 1389, 07:49 صبح
dataGridView1.Refresh();

ببينيد حل ميشه

ایمان مدائنی
شنبه 15 آبان 1389, 07:55 صبح
ممنون از لطفتون.
متد Form_load را صدا ميزنم كه خوبه اما مي خوام وقتي ركوردي ويرايش شده روي همان ركورد قرار بگيره نه ركورد اول.
خب شما ركوردها رو مرتب كن با دستور Order By بعد خيالت راحته كه ميره سر جاي قبليش
البته اين دستور رو بايد به آخر كوئري اضافه كني و بعد از اين دستور نام ستون كه قراره مرتب بشه

maryamgol
شنبه 15 آبان 1389, 07:58 صبح
نه اين كد هيچ تغييري رو ايجاد نمي كنه.

maryamgol
شنبه 15 آبان 1389, 08:42 صبح
فكر مي كنم منظورم رو متوجه نشديد .بعد از تغييرات من متد Form_load را صدا ميزنم.
فرض كنيد ركورد 5 ويرايش شده بعد از صدا زدن اين متد اشاره گر ديتاگريد در ركورد ا قرار مي گيره در صورتي كه من ميخوام اشاره گر روي همان ركورد 5 قرار بگيره.

ایمان مدائنی
شنبه 15 آبان 1389, 08:49 صبح
خب شما قبل از رفرش شماره رديف رو با e.IndexRow در بيار بعد از رفرش در آخر دستورات خط رو روي همون ببر


private int I = 0;
private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e)
{
I = e.RowIndex;
}
بعد در آخر دستور رفرش كد زير رو بزار

dataGridView1.Rows[I].Selected = true;

maryamgol
یک شنبه 16 آبان 1389, 09:29 صبح
اين كدها براي ويرايش و حذف خوبه.
اما براي درج روي ركوردي كه تازه درج شده قرار نمي گيره و ركوردها بر اساس نام خانوادگي مرتب مي شوند.

mahdi87_gh
یک شنبه 16 آبان 1389, 10:15 صبح
نام خانوادگی جدید رو جستجو کن و بعد از بدست آوردن اندیس برو به اون سطر از گرید. اگه از dataTable داری به عنوان DataSource گرید استفاده میکنی:

int pos=tbl.DefaultView.Find("newlastname");

maryamgol
یک شنبه 16 آبان 1389, 10:22 صبح
منظورتون رو متوجه نميشم. اين امكان وجود داره كه نام خانوادگي چند نفر يكسان باشه

mahdi87_gh
یک شنبه 16 آبان 1389, 10:27 صبح
شما چه چیزی رو به عنوان dataSource گرید گذاشتین؟

maryamgol
یک شنبه 16 آبان 1389, 10:32 صبح
ببينيد من يه كوئري از جداول ساختم و ديتاگريدويو رو به اون وصل كردم

mahdi87_gh
یک شنبه 16 آبان 1389, 10:37 صبح
خب این کوئری یک سری سطر برمیگردنه دیگه، این سطرها داخل چیه؟ DataTable,Dataset

maryamgol
یک شنبه 16 آبان 1389, 10:45 صبح
داخل data set است

mahdi87_gh
یک شنبه 16 آبان 1389, 10:54 صبح
همانطور که خودتون میدونید، داخل dataset مجموعه ای از dataTable ها داریم. که شما یکی از اونها رو بعنوان دیتاسورس گرید قرار میدین.
هر دیتاتیبل هم یک DataView بصورت پیشفرض داره که شما میتونین از طریق اون کارهایی مثل sort,filter,find انجام بدین. این جدول شما بالاخره باید یک کلسد اصلی داشته باشه دیگه، شما بعد از اینکه رکورد جدید درج شد، گرید رو آپدیت کردین؛ سورت رو بر اساس فیلد کلید اصلی میکنین، یا تابع find اندیس رکورد رو پیدا میکنین و اون سطر از گرید رو انتخاب میکنید
موفق باشید

Mohandes2009
یک شنبه 16 آبان 1389, 13:54 عصر
می تونی در هر عمل گرید را کامل پاک کرده و دوباره اطلاعات را از بانک بریزی داخل گرید