PDA

View Full Version : حذف یک رکورد از dataGridView و انجام تغییرات در همان لحظه



mahdi_7610
شنبه 12 اردیبهشت 1388, 21:04 عصر
سلام

من توی فرم1 یک dataGridView و یک button دارم . با زدن باتن form2 باز می شه
سپس اسم یک فیلد را داخل textbox که درفرم2 قرار داره می نویسم و با زدن دکمه delete یک رکورد از dataGridView که در فرم1 قرار داره را حذف می کنه

من کدش را نوشتم و درست هم کار می کنه .

اما مشکل اینجاست که باید یک بار برنامه را ببندم و بعد باز کنم تا تغییرات در dataGridView ثبت بشن

چیکار کنم تا بعد از زدن دکمه delete تغییرات در همان زمان در dataGridView ثبت شن و دیگه نیازی به باز و بسته کردن برنامه نباشه .

khaste_007
شنبه 12 اردیبهشت 1388, 22:28 عصر
با سلام این پست رو حتما بخون
http://barnamenevis.org/forum/showthread.php?t=157162

mahdi_7610
شنبه 12 اردیبهشت 1388, 22:58 عصر
با سلام این پست رو حتما بخون
http://barnamenevis.org/forum/showthread.php?t=157162

سلام

من این کار را قبلا هم کردم ولی نمی شه .

به خاطر این که من دستور حذف را توی فرم2 نوشتم . برای اینکه بتونم از فرم2 dataGridView را در فرم1 رفرش کنم چی کار کنم ؟

اگه با کد توضیح بدید ممنم می شم .

مرسی

debugger
یک شنبه 13 اردیبهشت 1388, 09:10 صبح
يه تابع load Data Grid بنويس و در هر بار انجام ئائن عمليات حذف و اضافه و دلت اونو فراخواني كن .

araelectronic@ymail.com
یک شنبه 13 اردیبهشت 1388, 09:34 صبح
با سلام
دوست عزیز تا آنجاییکه من متوجه شدم شما میخواهید در هر لحظه که از دیتابیس رکوردی را حذف کردید در همان لحظه دیتاگرید شما refresh شود. برای اینکار بعد از حذف از دیتابیس
dataset را clear کرده و دوباره پر کنید و برای ÷اک کردن گرید از کد زیر استفاده کنید
DataGridView1.DataSource = Nothing
و بعد از آن دوباره گرید را بایند کنید

موفق باشید

captain_black81
یک شنبه 13 اردیبهشت 1388, 11:23 صبح
الف - در فرم 1 یک تابع public void refreshdataGrid() بسازید که کارش رفرش دیتا گریده
ب - هنگام باز کردن فرم 2 و قبل از frm2.show() اینو قرار بده: frm2.owner=this
ج: در فرم 2 بعد از هر اضافه کردن:


(this.owner as Form1).refreshdatagrid();

mahdi_7610
یک شنبه 13 اردیبهشت 1388, 12:54 عصر
سلام

هیچ کدوم از اینا جواب نداد .

باز هم باید فرم را ببندم و باز کنم تا تغییرات اعمال بشه .

plez help :ناراحت:

araelectronic@ymail.com
یک شنبه 13 اردیبهشت 1388, 13:14 عصر
با سلام
کدتو رو بعد از اعمال تغییرات بذارید لطفا . اینکارو من بارها انجام دادم و جواب میده

mahdi_7610
یک شنبه 13 اردیبهشت 1388, 18:46 عصر
با سلام
کدتو رو بعد از اعمال تغییرات بذارید لطفا . اینکارو من بارها انجام دادم و جواب میده

سلام

راستش دستوراتی که شما گفتید را من درست متوجه نشدم . یا شاید درست نتونستم اجراشون کنم .

این کد کجا باید نوشته بشه ؟
DataGridView1.DataSource = Nothing
من اصلا به گزینه nothing دسترسی ندارم .

dataset را که من clear کردم .

شما میشه با کد توضیح بدید ؟

یه خورده در حد ابتدایی توضیح بدید اخه ما تازه کاریم .:افسرده:

مرسی

raziee
یک شنبه 13 اردیبهشت 1388, 19:48 عصر
با سلام این پست رو حتما بخون
http://barnamenevis.org/forum/showthread.php?t=157162

این آدرس وجود نداره. (چرا؟)

sd.CSharpProgrammer
یک شنبه 13 اردیبهشت 1388, 20:14 عصر
با سلام

دوست عزیز (mahdi_7610) من استفاده از کد زیر رو به شما پیشنهاد می کنم. این کد رو خودم نوشتم و امتحان کردم و کاملاً درسته و جواب میده. شاید تو بعضی از قسمت ها از روشهای غیر اصولی استفاده کردم ولی مهم اینه که کاری که میخوای رو انجام میده :



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

namespace DataGridViewSample
{
public partial class Form1 : Form
{
private string[] dataGridColumnsHeadersText = { "کد کتاب", "نام کتاب", "ناشر", "توضیحات" };
private string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + new System.IO.FileInfo(Application.ExecutablePath).Dir ectoryName + "\\SampleDataBase.mdb";
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
LoadTBookTable();
}

private void btnDelete_Click(object sender, EventArgs e)
{
if (txtID.Text.Length > 0)
{
if (ExistRecord(txtID.Text))
{
if (MessageBox.Show("آیا مطمئنید که می خواهید رکورد مورد نظر را حذف کنید؟", "Question", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes)
{
DeleteRecordByID(txtID.Text);

// baraye hazfe satre dataGridView az code zir estefade kon...
for (int counter = 0; counter < dataGridView1.Rows.Count - 1; counter++)
if (dataGridView1.Rows[counter].Cells[0].Value.ToString() == txtID.Text)
dataGridView1.Rows.RemoveAt(counter);
// -----------------------------------------------------------
MessageBox.Show("رکورد مورد نظر حذف شد", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
else
{
MessageBox.Show("رکورد مورد نظر موجود نیست", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtID.Focus();
txtID.SelectAll();
}
}
else
{
MessageBox.Show("لطفاً فیلد مورد نظر را پر کنید", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtID.Focus();
}
}

private void LoadTBookTable()
{
DataSet table;
OleDbDataAdapter dataAdapter;

try
{
table = new DataSet();

dataAdapter = new OleDbDataAdapter("SELECT * FROM TBook", connectionString);
dataAdapter.Fill(table, "TBook");

dataGridView1.DataSource = table;
dataGridView1.DataMember = "TBook";

for (int counter = 0; counter < dataGridColumnsHeadersText.Length; counter++)
dataGridView1.Columns[counter].HeaderText = dataGridColumnsHeadersText[counter];

dataGridView1.Columns[1].Width = 212;
}
catch (OleDbException exp)
{
MessageBox.Show(exp.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
table = null;
dataAdapter = null;
}
}

private bool ExistRecord(string strID)
{
bool result = false;
// -------------------------------------------
DataSet table;
OleDbDataAdapter dataAdapter;

try
{
table = new DataSet();
dataAdapter = new OleDbDataAdapter("SELECT * FROM TBook WHERE ID='" + strID + "'", connectionString);
dataAdapter.Fill(table, "TBook");

if (table.Tables["TBook"].Rows.Count > 0)
result = true;
}
catch (OleDbException ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
table = null;
dataAdapter = null;
}
// -------------------------------------------
return result;
}

private bool DeleteRecordByID(string strID)
{
bool result = false;
// -------------------------------------------
OleDbConnection connection;
OleDbCommand command;

try
{
connection = new OleDbConnection(connectionString);
command = new OleDbCommand("DELETE * FROM TBook WHERE ID='" + strID + "'", connection);

connection.Open();
command.ExecuteNonQuery();
connection.Close();

result = true;
}
catch (OleDbException ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
command = null;
connection = null;
}
// -------------------------------------------
return result;
}
}
}




موفق باشی دوست من

araelectronic@ymail.com
یک شنبه 13 اردیبهشت 1388, 22:34 عصر
با سلام
دوست عزیز کد ارسالی من در vb.net بود میبخشید شما میتوانید از این کد استفاده کنید



dataGridView1.DataBindings.Clear;

mahdi_7610
یک شنبه 13 اردیبهشت 1388, 23:03 عصر
با سلام

دوست عزیز (mahdi_7610) من استفاده از کد زیر رو به شما پیشنهاد می کنم. این کد رو خودم نوشتم و امتحان کردم و کاملاً درسته و جواب میده. شاید تو بعضی از قسمت ها از روشهای غیر اصولی استفاده کردم ولی مهم اینه که کاری که میخوای رو انجام میده :



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


namespace DataGridViewSample
{
public partial class Form1 : Form
{
private string[] dataGridColumnsHeadersText = { "کد کتاب", "نام کتاب", "ناشر", "توضیحات" };
private string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + new System.IO.FileInfo(Application.ExecutablePath).Dir ectoryName + "\\SampleDataBase.mdb";
public Form1()
{
InitializeComponent();
}


private void Form1_Load(object sender, EventArgs e)
{
LoadTBookTable();
}


private void btnDelete_Click(object sender, EventArgs e)
{
if (txtID.Text.Length > 0)
{
if (ExistRecord(txtID.Text))
{
if (MessageBox.Show("آیا مطمئنید که می خواهید رکورد مورد نظر را حذف کنید؟", "Question", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes)
{
DeleteRecordByID(txtID.Text);


// baraye hazfe satre dataGridView az code zir estefade kon...
for (int counter = 0; counter < dataGridView1.Rows.Count - 1; counter++)
if (dataGridView1.Rows[counter].Cells[0].Value.ToString() == txtID.Text)
dataGridView1.Rows.RemoveAt(counter);
// -----------------------------------------------------------
MessageBox.Show("رکورد مورد نظر حذف شد", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
else
{
MessageBox.Show("رکورد مورد نظر موجود نیست", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtID.Focus();
txtID.SelectAll();
}
}
else
{
MessageBox.Show("لطفاً فیلد مورد نظر را پر کنید", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtID.Focus();
}
}


private void LoadTBookTable()
{
DataSet table;
OleDbDataAdapter dataAdapter;


try
{
table = new DataSet();


dataAdapter = new OleDbDataAdapter("SELECT * FROM TBook", connectionString);
dataAdapter.Fill(table, "TBook");


dataGridView1.DataSource = table;
dataGridView1.DataMember = "TBook";


for (int counter = 0; counter < dataGridColumnsHeadersText.Length; counter++)
dataGridView1.Columns[counter].HeaderText = dataGridColumnsHeadersText[counter];


dataGridView1.Columns[1].Width = 212;
}
catch (OleDbException exp)
{
MessageBox.Show(exp.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
table = null;
dataAdapter = null;
}
}


private bool ExistRecord(string strID)
{
bool result = false;
// -------------------------------------------
DataSet table;
OleDbDataAdapter dataAdapter;


try
{
table = new DataSet();
dataAdapter = new OleDbDataAdapter("SELECT * FROM TBook WHERE ID='" + strID + "'", connectionString);
dataAdapter.Fill(table, "TBook");


if (table.Tables["TBook"].Rows.Count > 0)
result = true;
}
catch (OleDbException ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
table = null;
dataAdapter = null;
}
// -------------------------------------------
return result;
}


private bool DeleteRecordByID(string strID)
{
bool result = false;
// -------------------------------------------
OleDbConnection connection;
OleDbCommand command;


try
{
connection = new OleDbConnection(connectionString);
command = new OleDbCommand("DELETE * FROM TBook WHERE ID='" + strID + "'", connection);


connection.Open();
command.ExecuteNonQuery();
connection.Close();


result = true;
}
catch (OleDbException ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
command = null;
connection = null;
}
// -------------------------------------------
return result;
}
}
}





موفق باشی دوست من




سلام دوست عزیزم

dataGridView من توی فرم 1 هست و من قصد دارم عمل حذف رکورد را از فرم 2 انجام بدم .

اگه بخوام از همون فرم 1 رکورد را حذف کنم کدی که خودم نوشتم کار می کنه و مشکلی نداره .

مشکل من اینه که من قصد دارم از form1 یک سطر را حذف کنم . و سطر حذف هم می شه اما برای اینکه تغییرات توی dataGridView اعمال بشه باید یکبار برنامه را باز و بسته کنم تا تغییرات اعمال بشه .
من قصد دارم همون موقع که اطلاعات از دیتابیس حذف شد توی dataGridView هم اعمال بشه .

plz help

مرسی

mahyar-m
یک شنبه 13 اردیبهشت 1388, 23:38 عصر
شما دیتا گریدتو به چه صورت و با چه تابعی پر میکنی .

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

ncs2008
دوشنبه 10 خرداد 1389, 11:37 صبح
آقا مهدی راست میگه این کدهایی که گفتین جواب نداد.
این کار در asp.net به اندازه یه آب خوردن راحته اما در winform سخته.

raminIT
سه شنبه 15 شهریور 1390, 06:48 صبح
سلام
من هم همین مشکل رو داشتم اما برطرف شد مطمئنم که جواب میده
اول یه کلاس ایجاد کد با تابع های زیر
public datasource()
{
cmd.Connection = connection;

}
public DataSet read(string tablename)
{
cmd.CommandText = "select * from "+tablename+" ";
connection.Open();
cmd.ExecuteNonQuery();
connection.Close();
datap = new SqlDataAdapter();
datap.SelectCommand = cmd;
datas = new DataSet();
datap.Fill(datas, ""+tablename+"");
//
connection.Close();
return datas;
}

بعد برای فراخونی کردنش هم هرجا که نیاز داری پس از زدن کنترلی تغییرات اعمال بشه فراخونی اش میکنی
datasource cb = new datasource();
DataSet ds1 = cb.read("tablename");
dataGridView2.DataSource = ds1;
dataGridView2.DataMember = "tablename";