PDA

View Full Version : رفرش شد گرید ویو در حین اجرای برنامه



farshid_web
یک شنبه 12 آذر 1391, 19:06 عصر
سلام به همه دوستان

من میخوام بپرسم که چطوری باید یه دیتاگریدویو بعد از اینکه دستور delete یا update یا insert روش اجرا میشه همون موقع رفرش بشه بدون اینکه فرم بسته بشه و دوباره اجرا بشه و اطلاعات جدید هم نمایش داده بشه ؟

خیلی ممنون به خاطر وقتی که برا ی من میزارین :بوس:

lahiji
یک شنبه 12 آذر 1391, 19:17 عصر
سلام

اگر دیتاگرید رو به دیتاست متصل کردی می تونی یک بار clear کنی و مجددا fill کن

موفق باشید

farshid_web
یک شنبه 12 آذر 1391, 19:33 عصر
سلام

اگر دیتاگرید رو به دیتاست متصل کردی می تونی یک بار clear کنی و مجددا fill کن

موفق باشید

مرسی از جوابتون
بله من از دیتا ست استفاده کردم
میشه لطف کنید بگید کجا باید clear و fill را انجام بدم؟

saber_ershadi
یک شنبه 12 آذر 1391, 19:36 عصر
سلام دوست عزیز
اول بگو چطور به بانک متصل میشی
من خودم از این روش استفده میکنم نوع برنامه هام 3 لایه ست میای تو یه کلاس مثلا کتاب عملیات های مختلف رو با دستورات SQL مینویسی درج ، حذف ، ویرایش ....

public DataTable Show()
{
SqlCommand com = new SqlCommand();
com.CommandText = "select * from db2";
DataAccess da = new DataAccess();
da.Connect();
DataTable dt = new DataTable();
dt = da.Docommand(com);
da.DisConnect();
return dt;
}

بعد میای تو دکمه بعد از عمل درج این کار رو میکنی یه متغییر از نوع کلاسی که تعریف کردی ایجاد میکنی بعد cq.show رو به دیتاسورسه دیتاگرید نسبت میدی

qasal2 cq = new qasal2();
dg2.DataSource = cq.Show();



امیدوارم کمک کرده باشم

mousa1992
یک شنبه 12 آذر 1391, 19:46 عصر
سلام عزیز
کافیه که دباره خاصیت datasource گرید رو مقدار دهی کنی تا اپدیت بشه

farshid_web
یک شنبه 12 آذر 1391, 19:55 عصر
سلام دوست عزیز
اول بگو چطور به بانک متصل میشی
من خودم از این روش استفده میکنم نوع برنامه هام 3 لایه ست میای تو یه کلاس مثلا کتاب عملیات های مختلف رو با دستورات SQL مینویسی درج ، حذف ، ویرایش ....

public DataTable Show()
{
SqlCommand com = new SqlCom
mand();
com.CommandText = "select * from db2";
DataAccess da = new DataAccess();
da.Connect();
DataTable dt = new DataTable();
dt = da.Docommand(com);
da.DisConnect();
return dt;
}

بعد میای تو دکمه بعد از عمل درج این کار رو میکنی یه متغییر از نوع کلاسی که تعریف کردی ایجاد میکنی بعد cq.show رو به دیتاسورسه دیتاگرید نسبت میدی

qasal2 cq = new qasal2();
dg2.DataSource = cq.Show();



امیدوارم کمک کرده باشم

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

lahiji
یک شنبه 12 آذر 1391, 19:55 عصر
مرسی از جوابتون
بله من از دیتا ست استفاده کردم
میشه لطف کنید بگید کجا باید clear و fill را انجام بدم؟

البته بهتر بود کد خودتو میدادی ما روش مناسب رو بهت می گفتیم حالا به هر حال برای خالی و پر کردن دیتاست:



DataSet ds = new DataSet();
ds.Clear();

SqlDataAdapter da = new SqlDataAdapter();
da.Fill(ds);

farshid_web
یک شنبه 12 آذر 1391, 19:56 عصر
سلام عزیز
کافیه که دباره خاصیت datasource گرید رو مقدار دهی کنی تا اپدیت بشه
چطوری باید این کار را بکنم؟
چون اصلا datasource را قبول نمیکنه و اصلا انگار نمیشناسدش مشکل از کجاست ؟

farshid_web
یک شنبه 12 آذر 1391, 19:58 عصر
البته بهتر بود کد خودتو میدادی ما روش مناسب رو بهت می گفتیم حالا به هر حال برای خالی و پر کردن دیتاست:



DataSet ds = new DataSet();
ds.Clear();

SqlDataAdapter da = new SqlDataAdapter();
da.Fill(ds);



مرسی از توجهتون این کد من هست

private void Form1_Load(object sender, EventArgs e)
{



SqlConnection con = new SqlConnection("server=HOME-PC\\MSQL;database=otomasion;uid=oto;pwd=aaa");
SqlCommand cmd = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter("select cod_sherkat as [کد شرکت],name_sherkat as[نام شرکت] ,sh_sabt as [شماره ثبت], name_modir as [نام مدیر], sh_eghtesad as [شماره اقتصادی], address as [ادرس] ,tel as [ تلفن] ,pass as [پسورد] ,username as [نام کاربری],chek as[امضا الکترونیکی] from et_sherkat", con);
con.Open();
DataSet ds = new DataSet();
da.Fill(ds, "T1");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "T1";

con.Close();

}

lahiji
یک شنبه 12 آذر 1391, 20:06 عصر
مرسی از توجهتون این کد من هست

private void Form1_Load(object sender, EventArgs e)
{



SqlConnection con = new SqlConnection("server=HOME-PC\\MSQL;database=otomasion;uid=oto;pwd=aaa");
SqlCommand cmd = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter("select cod_sherkat as [کد شرکت],name_sherkat as[نام شرکت] ,sh_sabt as [شماره ثبت], name_modir as [نام مدیر], sh_eghtesad as [شماره اقتصادی], address as [ادرس] ,tel as [ تلفن] ,pass as [پسورد] ,username as [نام کاربری],chek as[امضا الکترونیکی] from et_sherkat", con);
con.Open();
DataSet ds = new DataSet();
da.Fill(ds, "T1");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "T1";

con.Close();

}



sqldataadaper و dataset رو سراسری تعریف کن

و قبل از fill کردن clear کن




DataSet ds = new DataSet();
ds.Clear();
da.Fill(ds, "T1");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "T1";

farshid_web
یک شنبه 12 آذر 1391, 20:29 عصر
یه سوال دیگه مگه وقتی توی فرم لود تعریف کنیم سراسری نمیشه؟؟

farshid_web
یک شنبه 12 آذر 1391, 20:29 عصر
sqldataadaper و dataset رو سراسری تعریف کن

و قبل از fill کردن clear کن




DataSet ds = new DataSet();
ds.Clear();
da.Fill(ds, "T1");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "T1";




یه سوال دیگه مگه وقتی توی فرم لود تعریف کنیم سراسری نمیشه؟؟
خیلی ممنون

lahiji
یک شنبه 12 آذر 1391, 20:37 عصر
یه سوال دیگه مگه وقتی توی فرم لود تعریف کنیم سراسری نمیشه؟؟

نه باید داخل public partial class تعریف کنی



public partial class Form1 : Form
{
dataset ds;
وغیره







public Form1()
{
InitializeComponent();

}

farshid_web
یک شنبه 12 آذر 1391, 20:39 عصر
ببخشید من یه مشکل دیگه پیدا کردم من دلیت و اپدیت را تو ی صفحات دیگه ای نوشتم و الان وقتی که این کد را توی فرم لود صفحه اول مینویسم عمل نمیکنه.... توی اون دوتا صفحه هم که اصلا دیتاستی تعریف نشده حالا من چکار باید بکنم؟؟:عصبانی++:

lahiji
یک شنبه 12 آذر 1391, 20:43 عصر
ببخشید من یه مشکل دیگه پیدا کردم من دلیت و اپدیت را تو ی صفحات دیگه ای نوشتم و الان وقتی که این کد را توی فرم لود صفحه اول مینویسم عمل نمیکنه.... توی اون دوتا صفحه هم که اصلا دیتاستی تعریف نشده حالا من چکار باید بکنم؟؟:عصبانی++:

کانکشنت درسته ؟ و یا using ها رو فعال کردی ؟

farshid_web
یک شنبه 12 آذر 1391, 20:44 عصر
بله کانکشنم درسته

danialafshari
یک شنبه 12 آذر 1391, 20:46 عصر
دوست عزیز من شما می تونی دقیقا بعد از کد add,delet,update خط بعدیش کد Form_Load رو کپی کن یا این کد رو بعد از عملیات add,delete,update بزار
Form1_Load(null, null)
موفق باشی

lahiji
یک شنبه 12 آذر 1391, 20:52 عصر
بله کانکشنم درسته

کدت رو بذار ببینیم !

farshid_web
یک شنبه 12 آذر 1391, 20:53 عصر
دوست عزیز من شما می تونی دقیقا بعد از کد add,delet,update خط بعدیش کد Form_Load رو کپی کن یا این کد رو بعد از عملیات add,delete,update بزار
Form1_Load(null, null)
موفق باشی

این ارور را میده
Error 1 The name 'home_Load' does not exist in the current context

home اسم فرمم هست

farshid_web
یک شنبه 12 آذر 1391, 20:55 عصر
این کل کد این فرم هست


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace otomasion
{
public partial class delete : Form
{
public delete()
{
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();
ds.Clear();
da.Fill(ds, "T1");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "T1";
InitializeComponent();
}

private void delete_Load(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("server=HOME-PC\\MSQL;database=otomasion;uid=oto;pwd=aaa");
SqlCommand cmd = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter("select cod_sherkat as [کد شرکت],name_sherkat as[نام شرکت] ,sh_sabt as [شماره ثبت], name_modir as [نام مدیر], sh_eghtesad as [شماره اقتصادی], address as [ادرس] ,tel as [ تلفن] ,pass as [پسورد] ,username as [نام کاربری],chek as[امضا الکترونیکی] from et_sherkat", con);
con.Open();
DataSet ds = new DataSet();
da.Fill(ds, "T1");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "T1";
con.Close();
}

private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text != "")
{
DialogResult dialogResult = MessageBox.Show("ایا شما مطمین هستید؟", "حذف شرکت", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
SqlConnection con = new SqlConnection("server=HOME-PC\\MSQL;database=otomasion;uid=oto;pwd=aaa");
string s = "delete from et_sherkat where cod_sherkat=@c";

SqlCommand cmd = new SqlCommand(s, con);
cmd.Parameters.AddWithValue("@c", textBox1.Text);
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
}
else if (dialogResult == DialogResult.No)
{

}
}
else
{
label2.Text = "کد شرکت نمیتواند خالی باشد";
}
this.Close();


}

}
}

lahiji
یک شنبه 12 آذر 1391, 21:05 عصر
این کل کد این فرم هست


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace otomasion
{
public partial class delete : Form
{
public delete()
{
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();
ds.Clear();
da.Fill(ds, "T1");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "T1";
InitializeComponent();
}

private void delete_Load(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("server=HOME-PC\\MSQL;database=otomasion;uid=oto;pwd=aaa");
SqlCommand cmd = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter("select cod_sherkat as [کد شرکت],name_sherkat as[نام شرکت] ,sh_sabt as [شماره ثبت], name_modir as [نام مدیر], sh_eghtesad as [شماره اقتصادی], address as [ادرس] ,tel as [ تلفن] ,pass as [پسورد] ,username as [نام کاربری],chek as[امضا الکترونیکی] from et_sherkat", con);
con.Open();
DataSet ds = new DataSet();
da.Fill(ds, "T1");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "T1";
con.Close();
}

private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text != "")
{
DialogResult dialogResult = MessageBox.Show("ایا شما مطمین هستید؟", "حذف شرکت", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
SqlConnection con = new SqlConnection("server=HOME-PC\\MSQL;database=otomasion;uid=oto;pwd=aaa");
string s = "delete from et_sherkat where cod_sherkat=@c";

SqlCommand cmd = new SqlCommand(s, con);
cmd.Parameters.AddWithValue("@c", textBox1.Text);
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
}
else if (dialogResult == DialogResult.No)
{

}
}
else
{
label2.Text = "کد شرکت نمیتواند خالی باشد";
}
this.Close();


}

}
}


الان مشکلت کجاست حذف نمیکنه ؟

saber_ershadi
یک شنبه 12 آذر 1391, 22:42 عصر
این مثال رو خودم برات آماده کردم
http://www.kooshahootan.com/tel.rar
البته با روش 3 لایه نوشتمش امید وارم به چیزی که می خوای برسی

danialafshari
دوشنبه 13 آذر 1391, 02:06 صبح
سلام دوست عزیز
ببینید شما دارید کد زیر را چندین بار در برنامه تکرار می کنید که این کار صحیح نیست

SqlConnection con = new SqlConnection("server=HOME-PC\\MSQL;database=otomasion;uid=oto;pwd=aaa");
SqlCommand cmd = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter("select cod_sherkat as [کد شرکت],name_sherkat as[نام شرکت] ,sh_sabt as [شماره ثبت], name_modir as [نام مدیر], sh_eghtesad as [شماره اقتصادی], address as [ادرس] ,tel as [ تلفن] ,pass as [پسورد] ,username as [نام کاربری],chek as[امضا الکترونیکی] from et_sherkat", con);
بهتره معرفی این گونه کد ها را در بالای فرم فقط یک بار بنویسید تا در کل اون فرم فقط با زدن نام متغیر از اون استفاده کنید
به صورت زیر :
public static SqlConnection con = new SqlConnection("server=HOME-PC\\MSQL;database=otomasion;uid=oto;pwd=aaa");
SqlCommand cmd = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter("select cod_sherkat as [کد شرکت],name_sherkat as[نام شرکت] ,sh_sabt as [شماره ثبت], name_modir as [نام مدیر], sh_eghtesad as [شماره اقتصادی], address as [ادرس] ,tel as [ تلفن] ,pass as [پسورد] ,username as [نام کاربری],chek as[امضا الکترونیکی] from et_sherkat", con);
DataSet ds = new DataSet();
در ضمن بهتر در فسمت DataAdapter به حای اینکه مدام دائم Query جدید بنویسی در یک تابع Void بزاری که همه ی این چند خط در یک خط خلاصه بشه که مزیتش قابل درک بودن برنامه برای ارور یابی و سرعت برنامه بدلیل کد کمتر و بازدهی بالا می باشد

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

ali_habibi1384
دوشنبه 13 آذر 1391, 03:41 صبح
روش رفرش كردن اطلاعات براي لود كردن ديتا جديد روش دم دستي هست چون در اين روش اطلاعات بهم ميريزه و اصولي هم نيست چون شما مجبوريد به خاطر فقط يك سطر جديد يكبار سلكت از ديتا بيس بگيريد، چنانچه كاربر جستجو يا مرتبسازي انجام داده باشه و يا روي سطر خاصي كليك كرده باشه با اينكار كرسور مياد روي سطر اول اطلاعات و همه چي بهم ميريزه.
بهترين روش اينكه پس از اعمال تغييرات در ديتا بيس خودتون بصورت دستي و يك سلول يك سلول اطلاعات جديد سطرهاي گريد و ديتا تيبلتونو مقدار بديد.

danialafshari
دوشنبه 13 آذر 1391, 16:21 عصر
با تشکر
آقای حبیبی میشه یک نمونه کد یا سورس بزارید؟

farshid_web
سه شنبه 21 آذر 1391, 19:48 عصر
بچه ها من خیلی گیج شدم میشه یه نمونه کد برای من بزارین که درست متوجه بشم ؟؟
من توی فرم اصلیم از طریق منو میرم به یه صفحه دیگه و اونجا مقادیر تیبلم را اپدیت میکنم حالا من وقتی این صفحه را میبندم و به صفحه اصلیم برمیگردم اطلاعاتم اپدیت نشده و باید صفحا را ببندم و دوباره اجرا متن تا اطلاعاتم اپدیتشون نشون داده بشه...
دوستان خیلی لطف کردن و راه های متعددی را جلوم گذاشتن ولی من الان واقعا گیج شدم و نمیدونم که چه کار باید بکنم و از کدوم راه باید برم ؟!! :خجالت:
اگه میشه یه قطعه کد بزارین یا یه مثال خیلی ممنون میشم

farshid_web
سه شنبه 21 آذر 1391, 20:07 عصر
:افسرده::اشتباه:

danialafshari
سه شنبه 21 آذر 1391, 21:22 عصر
سلام دوست عزیز
این سورس رو برات میزارم امیدوارم بدردت بخوره

programerinfonet
سه شنبه 21 آذر 1391, 22:56 عصر
دوست عزیز اگه خیلی راحت بخوام واست بگم اینکه شما دستور SELECT رو توی یک رویداد بنویس
و بعد از هر کدوم از اعمال درج یا حذف یک بار اون رویداد رو فراخوانی کن
حله ؟؟؟ یا کد بذارم

farshid_web
چهارشنبه 22 آذر 1391, 15:00 عصر
خیلی ممنون از دو عزیزی که راهنمایی کردین
فکر میکنم متوجه شدم ولی اگه میتونید یه کد هم برام بزارین که دیگه کاملا متوجه بشم :قلب:

farshid_web
چهارشنبه 22 آذر 1391, 15:22 عصر
سلام دوست عزیز
این سورس رو برات میزارم امیدوارم بدردت بخوره

یه چیز دیگه ای هم که هست اینه که من دیتا بیسم را به صورت ویزاردی تعریف نکردم و الان به table1TableAdapter دسترسی ندارم که بخوام دوباره پرش کنم ایا میشه کاری کرد ؟؟؟ چون کد شما خیلی خوب و راحت بود و فهمیدمش

danialafshari
چهارشنبه 22 آذر 1391, 17:02 عصر
سلام دوست عزیز
مهم نیس که ویزارد بود یا نبود نکتش اینجاس :
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();

if (frm2.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
Form1_Load(null, null);
}
}

private void Form1_Load(object sender, EventArgs e)
{
//یا همون select ای که با کد نوشتی
// TODO: This line of code loads data into the 'dbDataSet.Table1' table. You can move, or remove it, as needed.
this.table1TableAdapter.Fill(this.dbDataSet.Table1 );

}
و بعد از add در فرم جدید نوشتن کد زیر ( در فرم 2)
DialogResult = System.Windows.Forms.DialogResult.OK;

موفق باشی

farshid_web
چهارشنبه 22 آذر 1391, 20:51 عصر
خیلی ممنون
این کد به جای اسم Form1_Load(null, null); فرم1 باید اسم فرمهامون را بنویسیم درسته؟؟ اگه درسته پس چرا بقیه فرمهام مثلا home_load و غیره ندارن؟
اگه نه چون من دوتا تبیل دارم که اپدیت و دلیت میشن پس باید جفتشا توی form1_load کار کنم؟

danialafshari
چهارشنبه 22 آذر 1391, 20:57 عصر
دوست عزیز اگر فرمات _load ندارن چون داخل فرم لودشون کدی وجود نداره !
باید کد select رو درون فرمی که نمایش میده در formload ش قرار بدی
حله؟

farshid_web
چهارشنبه 22 آذر 1391, 21:04 عصر
الان چک کردم کدام داخل فرم لود ها هست !!

programerinfonet
چهارشنبه 22 آذر 1391, 21:05 عصر
دوست خوبم شما این کد رو بنویس کارت راه می افته
اول کد زیر رو بنویس و دستور سلکتت رو بریز داخل این رویداد

public void show()
{

}


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

show();

danialafshari
چهارشنبه 22 آذر 1391, 21:24 عصر
منم دارم همینو بهش میگم