PDA

View Full Version : سوال: اتصال DataGridView به DataBase همراه با اعمال شرط



bahane274
سه شنبه 12 مرداد 1389, 22:04 عصر
سلام دوستان ! من یه مشکلی دارم.
وقتی که در C#‎‎ دستور زیر را برای اتصال DataGridView به DataBase می نویسم و دکمه Delete یا Edit رامیزنم،تغییرات موردنظر (مثلا حذف یک رکورد) به DataGridView اعمال نمیشه (مگر اینکه فرمم را که فرم فرزنده ببندم و دوباره باز کنم ) البته همانطور که پیداست توی SqlServer این تغییرات انجام میشه.




privatevoid Form1_Load(object sender, EventArgs e)

{
string strcon = "server=.;database=Amlak;integrated security=true";
SqlConnection con = newSqlConnection(strcon);
con.Open();

string sql="select * from Sepordeha Where Baygani='False'";

SqlDataAdapter dap = newSqlDataAdapter(sql,con);
dap.Fill( ds,"Sepordeha" );
dataGridView1.DataBindings.Clear();
dataGridView1.DataBindings.Add(newBinding("Datasource", ds, "sepordeha"));
dataGridView1.DataBindings.Clear();




و کد Delete را هم به این صورت نوشتم :






dataGridView1.ReadOnly = false;



dataGridView1.AllowUserToDeleteRows = true;

string strcon = "server=.;database=Amlak;integrated security=true";
SqlConnection con = newSqlConnection(strcon);
con.Open();
string sn;
SqlCommand cmd = newSqlCommand();
string sqlDel;
sn = dataGridView1.CurrentRow.Cells[0].Value.ToString();
sqlDel = "Delete FROM sepordeha WHERE ShomareRadif=" + sn;
cmd.CommandText = sqlDel;
cmd.Connection = con;
cmd.ExecuteNonQuery();






البته وقتی دیتا گریدمو به صورت ویزاردی به دیتا بیس وصل می کنم ، مشکلی پیش نمی یاد اما من نمی خوام همه رکورد های جدولمو نشون بدم بلکه می خوام شرط Where Baygani='False' اعمال شود.


در حالت ویزاردی در Form_Load می نویسم :




this.sepordehaTableAdapter1.Fill(this.amlakDataSet 1.sepordeha);



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

bahane274
چهارشنبه 13 مرداد 1389, 11:07 صبح
چرا کسی جوابمو نمی ده ؟

شاید من سوالمو خیلی خوب مطرح نکردم. منظورم دقیقا اینه که می خوام با اعمال یک شرط
DataGridView رو به دیتابیس وصل کنم.

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

حالا اگه تو کدهای نوشته شده ، مشکلی وجود داره بگید. یا اگه کدی دارید که همراه با اعمال شرط ، دکمه های حذف و درج و ویرایشش هم درست کار می کنه بهم بدید بی زحمت.

raminsalemi
چهارشنبه 13 مرداد 1389, 12:22 عصر
دوست عزیز شما باید کدی رو که در فرم لود نوشتید رو به صورت یک متد تعریف کنید و اون رو در باتن delete/editفراخوانی کنید تا دیتا گرید تون تغییرات رو نشون بده

mmd2009
چهارشنبه 13 مرداد 1389, 12:31 عصر
با سلام

ds.clear() هم فراموش نشه اگر می خواهدی به صورت متد تعریفش کنید

البته رویداد مربوط به نماش بانک در گرید رو هم میتونید فراخوانی کنید.

ایمان مدائنی
چهارشنبه 13 مرداد 1389, 13:12 عصر
همونطور كه دوستان گفتن پس از عمليات بايد فرم رو بروز رساني كني !
كدش رو برات ميذارم در آخر كدهات بزن :








this.FORM1_LOAD(this, null);

bahane274
چهارشنبه 13 مرداد 1389, 21:25 عصر
دست همگی تون درد نکنه.:تشویق:
من کل کدی رو که در Form_Load نوشته بودم به آخر کد Delete اضافه کردم و جواب گرفتم.
(این رو واسه اطلاع بقیه دوستان که با مشکل من روبرو میشن، نوشتم)

اما نمی دونم که چطور باید این کدها رو به صورت Method بنویسم تا کد برنامم کوتاهتر بشه.

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

اَرژنگ
چهارشنبه 13 مرداد 1389, 21:49 عصر
دست همگی تون درد نکنه.:تشویق:
من کل کدی رو که در Form_Load نوشته بودم به آخر کد Delete اضافه کردم و جواب گرفتم.
(این رو واسه اطلاع بقیه دوستان که با مشکل من روبرو میشن، نوشتم)

اما نمی دونم که چطور باید این کدها رو به صورت Method بنویسم تا کد برنامم کوتاهتر بشه.

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