PDA

View Full Version : سوال: نحوه نمایش داده های جدول در دیتا گرید بعد از insert کردن



vahidth
سه شنبه 07 آذر 1391, 16:50 عصر
سلام من با استفاده از پارامترها دستور insert به پایگاه داده رو نوشتم
حالا چطوری میتونم داده های جدول رو در یک دیتا گرید نمایش بدم
95676

Y_Safaiee
سه شنبه 07 آذر 1391, 17:25 عصر
سلام دوست عزیز

بعد از Insert کردن دوباره اطلاعات رو از پایگاه Fill کن.

مثلا سمپل کد پائینو نیگا :


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 Sample
{
public partial class Form1 : Form
{
SqlConnection cnn=new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Database1.mdf;Integrated Security=True;User Instance=True");
SqlDataAdapter da;
DataTable dt=new DataTable();
SqlCommand cmd;
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
da=new SqlDataAdapter("select * from users",cnn);
dt.Clear();
da.Fill(dt);
dataGridView1.DataSource=dt;
}

private void btn_sabt_Click(object sender, EventArgs e)
{
cnn.Close();
cnn.Open();
cmd = new SqlCommand("insert into users(ID,Name) values(@id,@Name)",cnn);
cmd.Parameters.AddWithValue("@id",long.Parse(txt_id.Text));
cmd.Parameters.AddWithValue("@Name",txt_name.Text);
cmd.ExecuteNonQuery();
Form1_Load(sender,e);
}
}
}



مهم ترین بخش Form1_Load(sender,e); هست که بعد از فرستادن دستور Insert دوباره صدا زده میشه.

موفق باشی
بایت بایت

vahidth
سه شنبه 07 آذر 1391, 17:32 عصر
انجام دادم دوست گلم چطوری بعد از insert کردن یک رکورد در دیتا گرید هم نمایش داده بشه

Y_Safaiee
سه شنبه 07 آذر 1391, 17:42 عصر
به کد فرم لود من دقت کنین

تو کد فرم لودم دوباره یه دستور sql نوشتم ,بعد توسط DataAdapter اطلاعات رو کشیدم داخل DataTable و بعد دیتاگرید رو به Datatable انتساب کردم.پس با هر بار Insert شدن اطلاعات در پایگاه دوباره کد فرم لودم صدا زده میشه و دوباره دیتاگرید اطلاعات جدید میگیره و آن تایم مقادیر جدید رو نشون میده.

vahidth
سه شنبه 07 آذر 1391, 17:55 عصر
داداش همه چی به درستی اجرا میشه ولی من میخوام بعد از کلیک کردن دکمه insert اطلاعات در دیتا گرید اپدیت بشه و رکوردی که ثبت کردم رو نمایش بده
من اطلاعات رو وارد میکنم و ثبت میشه ولی باید یکبار از برنامه خارج بشم و دوباره برنامه رو اجرا کنم تا رکورد جدیدی رو که اضافه کردم در دیتا گرید ببینم
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace pro
{
public partial class Form1 : Form
{
SqlConnection cnn = new SqlConnection("server=(local);database=db1;Integrated Security=True;");
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();
DataView dv = new DataView();


public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
try
{
DialogResult Result_Save = MessageBox.Show("آیا اطلاعات مشتری ثبت شوند؟", "ثبت اطلاعات", MessageBoxButtons.YesNo);
if (Result_Save == DialogResult.Yes)
{
cnn.Open();
SqlCommand my_cn = new SqlCommand("insert into bank(code,name,family,bed,best ) values(@cd_temp,@name_temp,@family_temp,@bed_temp, @best_temp)", cnn);
my_cn.Parameters.AddWithValue("@cd_temp", Int32.Parse(textBox1.Text));
my_cn.Parameters.AddWithValue("@name_temp", textBox2.Text);
my_cn.Parameters.AddWithValue("@family_temp", textBox3.Text);
my_cn.Parameters.AddWithValue("@bed_temp", textBox5.Text);
my_cn.Parameters.AddWithValue("@best_temp", textBox4.Text);
my_cn.ExecuteNonQuery();
}
}
catch (SqlException ex)
{
if (ex.Number == 2627)//درصورتی که کد کالا تکراری بود
{
MessageBox.Show(" این کد قبلا ثبت شده ", "ثبت اطلاعات");

}
}
}

private void Form1_Load(object sender, EventArgs e)
{

da = new SqlDataAdapter("select * from bank", cnn);
da.Fill(ds,"bank");
dv.Table = ds.Tables["bank"];
dataGridView1.DataSource = dv;
da.Update(ds,"bank");

}
}
}

Y_Safaiee
سه شنبه 07 آذر 1391, 18:06 عصر
داداش گلم با کدت کاملا بهم نشون دادی نه به کدهام دقت کردی نه سمپل کد رو دیدی,کم لطفی تا این حد:اشتباه:

این قسمت کدتو اینجوری بنویس :


try {
DialogResult Result_Save = MessageBox.Show("آیا اطلاعات مشتری ثبت شوند؟", "ثبت اطلاعات", MessageBoxButtons.YesNo);
if (Result_Save == DialogResult.Yes)
{
cnn.Open();
SqlCommand my_cn = new SqlCommand("insert into bank(code,name,family,bed,best ) values(@cd_temp,@name_temp,@family_temp,@bed_temp, @best_temp)", cnn);
my_cn.Parameters.AddWithValue("@cd_temp", Int32.Parse(textBox1.Text));
my_cn.Parameters.AddWithValue("@name_temp", textBox2.Text);
my_cn.Parameters.AddWithValue("@family_temp", textBox3.Text);
my_cn.Parameters.AddWithValue("@bed_temp", textBox5.Text);
my_cn.Parameters.AddWithValue("@best_temp", textBox4.Text);
my_cn.ExecuteNonQuery();
Form1_Load(sender,e);

}
}
catch (SqlException ex)
{
if (ex.Number == 2627)//درصورتی که کد کالا تکراری بود
{
MessageBox.Show(" این کد قبلا ثبت شده ", "ثبت اطلاعات");

}
}



در ضمن مثه من که dt.clear() ; تو قسمت لود فرمم نوشتم تو هم ds.Clear(); بنویس تا اطلاعات قبلی پاک و اطلاعات جدید جاشونو بگیره

vahidth
سه شنبه 07 آذر 1391, 18:18 عصر
داداش گلم شرمنده اگه ناراحت شدی
داداش حالا من میخوام یه (textbox) به فرم اضافه کنم و با استفاده ازون در دیتا گرید مثلا یک ای دی رو جستجو کنم و بعد عمل حذف کردن و ویرایش رو انجام بدم میشه بگی چطوری این کار رو انجام بدم

masoodz
سه شنبه 07 آذر 1391, 18:18 عصر
خوب دوست من این کار ساده ای هستش . تو رویداد باتون 1 ، توی try توی دستور if پس از دستور insert بیا و دوباره کد قراردادن دستور select توی دیتا گرید که واسه لود فرم تعریف کردی رو بذار . به این صورت وقتی که کلیک کنی اول عمل درج انجام میگیره و بعدش عمل آپدیت گرید .
موفق باشی

Y_Safaiee
سه شنبه 07 آذر 1391, 18:42 عصر
با سلام مجدد

اینم با تغییر datatable به dataset و شیوه جستجو و حذف



using System.Data.SqlClient;
namespace Sample
{
public partial class Form1 : Form
{
SqlConnection cnn=new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Database1.mdf;Integrated Security=True;User Instance=True");
SqlDataAdapter da;
DataSet ds=new DataSet ();
SqlCommand cmd;

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
da=new SqlDataAdapter("select * from users",cnn);
ds.Clear();
da.Fill(ds,"Users");
dataGridView1.DataSource=ds.Tables["Users"];
}

private void btn_sabt_Click(object sender, EventArgs e)
{
cnn.Close();
cnn.Open();
cmd = new SqlCommand("insert into users(ID,Name) values(@id,@Name)",cnn);
cmd.Parameters.AddWithValue("@id",long.Parse(txt_id.Text));
cmd.Parameters.AddWithValue("@Name",txt_name.Text);
cmd.ExecuteNonQuery();
Form1_Load(sender,e);

}

private void btn_search_Click(object sender, EventArgs e)
{
ds.Tables["users"].DefaultView.RowFilter = "name like '" + txt_Search.Text + "%'";
}

private void btn_del_Click(object sender, EventArgs e)
{
cnn.Close();
cnn.Open();
cmd = new SqlCommand("delete from users where id=@id", cnn);
cmd.Parameters.AddWithValue("@id",(long) dataGridView1.CurrentRow.Cells[0].Value);
cmd.ExecuteNonQuery();
Form1_Load(sender, e);
}


}
}



موفق باشی
بایت بایت

vahidth
سه شنبه 07 آذر 1391, 18:57 عصر
بازم تشکر ازت
داداش میخوام بر اساس code سرچ کنم چرا ارور میده

ds.Tables["bank"].DefaultView.RowFilter = "code like '" + textBox6.Text + "%'";
و یه سوال دیگه چطوری عمل حذف و ویرایش رو انجام بدم؟

Y_Safaiee
سه شنبه 07 آذر 1391, 19:05 عصر
با سلام مجدد

اگه فیلد code رشته ای ست میتونی از Like استفاده کنی مثلا از نوع Nvarchar و ... تعریف کرده باشیش اما اگه int یا bigint هست نمیتونی از like استفاده کنی و باید اینطوری بنویسی:



ds.Tables["users"].DefaultView.RowFilter = "id =" + long.Parse(txt_Search.Text);


فیلد ID من از نوع Bigint هست واسه همین Long.pars مینویسم اگه شما int هست int.pars میشه.

حذفم که نوشتم برات

mahangroup
پنج شنبه 09 آذر 1391, 11:29 صبح
سلام دوست من .

یه راه ساده ساده . باید دستور اپدیت کردن رو بعد دستور اینسرت درج کنی
به همین سادگی .

mahangroup
پنج شنبه 09 آذر 1391, 11:30 صبح
سلام دوست من .

یه راه ساده ساده . باید دستور اپدیت کردن رو بعد دستور اینسرت درج کنی
به همین سادگی .