PDA

View Full Version : مشکل با رفرش شدن مجدد datagrid



Julias99
شنبه 19 مهر 1393, 15:13 عصر
سلام دوستان
من تو گریددیو یک سطر رو ویرایش می کنم بعد برای اعمال تغییرات مجبورم تابع لود شدن از بانک رو مجدد قراخانی کنم که این هم دیر لود میشه و هم اینکه کدوم سطر ویرایش شد معلوم نمیشه
چی کار کنم که پس از اعمال تغییرات همون سطر مجدد انتخاب بشه و ...
و یا اصلأ راه اصولیش چیه ؟
اگه میشه کمک کنید
ممنون

parvizwpf
شنبه 19 مهر 1393, 16:37 عصر
مگه چقدر دیتا دارید هر سری لود میکنید؟

Julias99
شنبه 19 مهر 1393, 16:49 عصر
چیزی حدود 1000 تا رکورد
اونم از بانک روی شبکع

parvizwpf
شنبه 19 مهر 1393, 16:59 عصر
شما احتمالا نمیتونید بگید فقط یه رکورد رو در گرید رفرش کنه. یعنی شما یکجا 1000 رکورد به گرید میریزد. خب صفحه بندی کنید.

امیر مهرشاد
شنبه 19 مهر 1393, 18:59 عصر
ایندکس گزاری کارتون رو سریعتر میکنه یا اگر نمیخواهید بقول دوستمون تعداد مشخصی را لود نمایید یا در پشت پرده دیتاستتون رو رفرش کنید یا .....

شما با id هر رکوردی که تغیر میدید دسترسی به رکورد تغیر داده شده دارید بر همون اساس یه سلکتی بگیرید یا اون row در گریدتون رو انتخاب نمایید

juza66
شنبه 19 مهر 1393, 19:03 عصر
سلام

آقای امیر مهرشاد (http://barnamenevis.org/member.php?238445-%D8%A7%D9%85%DB%8C%D8%B1-%D9%85%D9%87%D8%B1%D8%B4%D8%A7%D8%AF) میشه بگید چطوری؟! کدی دارید در اختیارمون بذارید یا راهنمایی بفرمایین؟!

تشکر

امیر مهرشاد
یک شنبه 20 مهر 1393, 03:04 صبح
سلام

آقای امیر مهرشاد (http://barnamenevis.org/member.php?238445-%D8%A7%D9%85%DB%8C%D8%B1-%D9%85%D9%87%D8%B1%D8%B4%D8%A7%D8%AF) میشه بگید چطوری؟! کدی دارید در اختیارمون بذارید یا راهنمایی بفرمایین؟!

تشکر

124465
اینم فایل آموزشیش (http://ketabesabz.com/dl/13921)

NASA's Spaceman
یک شنبه 20 مهر 1393, 05:38 صبح
دوست عزیز شما وقتی رکورد رو ویرایش میکنید (این فقط برا وقتی هست که از اس کیو ال استفاده کنین) بعد انجام تغییرات روی رکورد باید یکبار دیتا ست رو ریست کنین و مجدد اون رو Fill کنین به دیتا آداپتور
اگه اینکار رو انجام بدید گمون نکنم به مشکل بر بخورید و نیازی هم به رفرش کردن دیتا گرید نیست چون این کار سرعت رو فقط پایین میاره
با سپاس Spaceman

juza66
یک شنبه 20 مهر 1393, 07:50 صبح
دوست عزیز شما وقتی رکورد رو ویرایش میکنید (این فقط برا وقتی هست که از اس کیو ال استفاده کنین) بعد انجام تغییرات روی رکورد باید یکبار دیتا ست رو ریست کنین و مجدد اون رو Fill کنین به دیتا آداپتور
اگه اینکار رو انجام بدید گمون نکنم به مشکل بر بخورید و نیازی هم به رفرش کردن دیتا گرید نیست چون این کار سرعت رو فقط پایین میاره
با سپاس Spaceman


سلام

ممنون میشم اگه آموزشی یا کد یا چیزی در اختیارمون بذارید تا یادبگیریم

تشکر

Julias99
یک شنبه 20 مهر 1393, 08:21 صبح
ممنون از تمام دوستان
اما جواب دندونگیری نگرفتم
آخرش چی کار کنم ؟

NASA's Spaceman
یک شنبه 20 مهر 1393, 09:56 صبح
والا آموزش به نظرم نمیتونه باشه چون چند خط کدنویسی که بیشتر نیست
اول که این ها رو تعریف میکنیم
SqlConnection sql = new SqlConnection(@"server=.\SQLEXPRESS;database=student;integrated security=true;");
SqlDataAdapter adapter;
DataSet set = new DataSet();
DataView view = new DataView();
بعد توی فرم لود هم که دیتاگرید رو پر میکنیم از محتویات درون پایگاه داده
private void Form1_Load(object sender, EventArgs e) {
sql.Open();
adapter = new SqlDataAdapter("select * from person", sql);
adapter.Fill(set, "person");
view.Table = set.Tables["person"];
view.Sort = "code";
dataGridView1.DataSource = view;
}
و اینم هم یه دستور نوشتم برا اضافه کردن که در زمان اجرا اطلاعات اضافه شده رو به همراه بقیه اطلاعات نمایش میده
private void button1_Click(object sender, EventArgs e) {
SqlCommand insert = new SqlCommand("insert into person(code,name,family,nomreh)values(" + Convert.ToInt32(textBox1.Text) + ",'" + textBox2.Text + "','" + textBox3.Text + "'," + Convert.ToInt32(textBox4.Text) + ")", sql);
insert.ExecuteNonQuery();
set.Reset();
adapter.Fill(set,"person");
view.Table=set.Tables["person"];
view.Sort="code";
dataGridView1.DataSource = view;
}
با سپاس Spaceman

juza66
سه شنبه 22 مهر 1393, 18:43 عصر
والا آموزش به نظرم نمیتونه باشه چون چند خط کدنویسی که بیشتر نیست
اول که این ها رو تعریف میکنیم
SqlConnection sql = new SqlConnection(@"server=.\SQLEXPRESS;database=student;integrated security=true;");
SqlDataAdapter adapter;
DataSet set = new DataSet();
DataView view = new DataView();
بعد توی فرم لود هم که دیتاگرید رو پر میکنیم از محتویات درون پایگاه داده
private void Form1_Load(object sender, EventArgs e) {
sql.Open();
adapter = new SqlDataAdapter("select * from person", sql);
adapter.Fill(set, "person");
view.Table = set.Tables["person"];
view.Sort = "code";
dataGridView1.DataSource = view;
}
و اینم هم یه دستور نوشتم برا اضافه کردن که در زمان اجرا اطلاعات اضافه شده رو به همراه بقیه اطلاعات نمایش میده
private void button1_Click(object sender, EventArgs e) {
SqlCommand insert = new SqlCommand("insert into person(code,name,family,nomreh)values(" + Convert.ToInt32(textBox1.Text) + ",'" + textBox2.Text + "','" + textBox3.Text + "'," + Convert.ToInt32(textBox4.Text) + ")", sql);
insert.ExecuteNonQuery();
set.Reset();
adapter.Fill(set,"person");
view.Table=set.Tables["person"];
view.Sort="code";
dataGridView1.DataSource = view;
}
با سپاس Spaceman



کدها رو چندین بار تست کردم، باز همون فراخوانی مجدد دیتابیس در دیتاگرید شد که ...!!
راه حلی دیگه وجود نداره؟! می خوام دیتاگرید دوباره فراخوانی نشه، یک سطر از دیتاگرید انتخاب کردم وقتی دوباره رفرش کنم برمیگرده اول سطر راهی دیگه نیست؟!

NASA's Spaceman
سه شنبه 22 مهر 1393, 20:19 عصر
دوست عزیز تو این روش شما کاری به دیتا گرید ندارید و فقط دیتاست هست که به روز میشه و این روش برا من که خیلی عالی داره کار میکنه
و یه نکته دیگه اینکه تا جایی که میشه سعی کنین از toolbox کمتر استفاده کنین روی سرعت تاثیر داره
ولی کد بالا برا خودم که تو رکورد های بالا خوب کار میکنه
با سپاس Spaceman

RIG000
چهارشنبه 23 مهر 1393, 00:27 صبح
بعد از دو سال یکم ado.1.1 :)
ببین شما برای اپدیت مگه ای دی یوزر رو نباید داشته باشید؟ خب حالا از همون ای دی استفاده میکنی . این همه سختی نداشت. فقط من همین جوری کد زدم مرتب و اصولی نوشتنش با خودت

private void getuser() {
OleDbConnection con = new OleDbConnection();
con.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Laptop-os\Desktop\WindowsFormsApplication1\WindowsFormsAp plication1\bin\db.accdb";
OleDbDataAdapter da = new OleDbDataAdapter("Select * from Table1", con);
DataTable dt = new System.Data.DataTable();
da.Fill(dt);
dataGridView1
.DataSource = dt;
}
private void getuser(int getid)
{
OleDbConnection con = new OleDbConnection();
con.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Laptop-os\Desktop\WindowsFormsApplication1\WindowsFormsAp plication1\bin\db.accdb";
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM Table1 WHERE id = " + getid + "", con);
DataTable dt = new System.Data.DataTable();
da.Fill(dt);
dataGridView1
.DataSource = dt;
}
private void Form1_Load(object sender, EventArgs e)
{


getuser();




}


private void dataGridView1_Click(object sender, EventArgs e)
{
textBox1.Text = dataGridView1.SelectedCells[1].Value.ToString();
}


private void btnsave_Click(object sender, EventArgs e)
{
OleDbConnection con = new OleDbConnection();
int getid = Convert.ToInt32(dataGridView1.SelectedCells[0].Value);


try
{
con.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Laptop-os\Desktop\WindowsFormsApplication1\WindowsFormsAp plication1\bin\db.accdb";
OleDbCommand cmd = new OleDbCommand("UPDATE Table1 SET name = '" + textBox1.Text + "' WHERE id = " + dataGridView1.SelectedCells[0].Value + " ", con);


con.Open();
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("Save change....!!!!");
getuser(getid);




}
catch (Exception ex)
{


MessageBox.Show(ex.Message);
}
finally
{ con.Dispose(); con.Close(); }


}
فایلشم ضمیمه شد

RIG000
چهارشنبه 23 مهر 1393, 00:30 صبح
تو این حالت خیلییی کارهای دیگه هم میشه. کرد تنوع رنگ و ....
در ضمن بابت لود اطلاعات سنگین من با backgroudworker بود اگه اشتباه نکنم کار کردم . مثل therd هست . نمیزاره system notresponding بشه برنامه .

jir_jir_jir
شنبه 26 مهر 1393, 01:02 صبح
عزیزم شما از 2 تا dataset یا 2 تا datatable استفاده کن آخرین رکوردی که اضافه کردی بگیر با دیتاهای قبلیت merg کن