PDA

View Full Version : delete کردن اطلاعات gridview به وسیله linq



amin tavakoli
سه شنبه 21 تیر 1390, 06:36 صبح
سلام بچه ها
میشه یکی برام کدهای del از پایگاه داده به وسیله linq رو بفرسته می خوام با انتخاب هر ردیف از grid view و کلیک دکمه delete آن رو از gridviw و پایگاه داده حذف کنم . ممنون:قلب:

mohamadz5
سه شنبه 21 تیر 1390, 09:32 صبح
سلام .
دوست عزیز رویداد OnRowDeleting را برای گرید ویو تعریف کن .


OnRowDeleting="dgReports_rowsdeleteing"
یک دکمه حذف به گرید ویو اضافه کن بعد command name را برابر Delete قرار بده


<asp:ImageButton ID="imgbtnDelete" title="حذف" CommandName="Delete"
ImageUrl="~/img/cross.png" runat="server" CausesValidation="false"
OnClientClick="return confirm('آیا از پاک شدن این ردیف مطمئن هستید؟');" />

بعد این کد را به برنامت اضافه کن

protected void dgReports_rowsdeleteing(object sender, GridViewDeleteEventArgs e)
{
DataClassesDataContext dc = new DataClassesDataContext();

var delete = from newsid in dc.FNews where (newsid.id == Convert.ToInt32(this.dgReports.DataKeys[e.RowIndex].Value)) select newsid;
dc.FNews.DeleteOnSubmit(delete.First());
dc.SubmitChanges();
Response.Redirect("AdminNews.aspx");
}

mohamadz5
سه شنبه 21 تیر 1390, 09:35 صبح
یادم رفت
اینو هم به گرید اضافه کن

DataKeyNames="id"

اینجا id کلید جدول منه . مقدار id به برنامه حذف پاس داده میشه و با دستورات لینک ردیف مورد نظر حذف میشه

alireza_wills
سه شنبه 21 تیر 1390, 11:09 صبح
سلام
اصلاً کاری نداره یک خط کد هم نیست.
وقتی datagrid رو با wizard یه دیتا بیس وصل میکنی یه کد تو formload میاد
this.t_CommerceTableAdapter.Fill(this.bZdataSet.T_ Commerce);
کافی کدشو کپی کنی هر جا که میخوای عمل حذف انجام بشه بعد بجای کلمه Fill بنویسی Update

saman6384
سه شنبه 21 تیر 1390, 13:09 عصر
چرا با پروسیجر ها کار نمیکنی!
هم راحتتره هم سریعتر!!

amin tavakoli
سه شنبه 21 تیر 1390, 13:50 عصر
سلام دوست عزیز . با پروسجر ها کار میکنم اما شنیده ام linq قابلیت های بسیاری داره پس شروع کردم به تحقیق راجع بهش .

amin tavakoli
سه شنبه 21 تیر 1390, 14:45 عصر
سلام . ممنون از پاسختون اما اگر من بخوام با یک دکمه خارج از گرید ویو این کار رو کنم چی ؟ کد زیر رو نوشتم اما خطا داره
private void button2_Click(object sender, EventArgs e)
{
var delete = from del in db.customers
where dataGridView1.CurrentRow.Index == del.id
select del;
db.customers.DeleteOnSubmit(delete.First());
db.SubmitChanges();

}

amin tavakoli
چهارشنبه 22 تیر 1390, 00:25 صبح
سلام دوست عزیز . راجع به کد بلا سوال داشتم و ان اینکه توی برنامه وقتی میخوام جای fill از دستورات دیگه مثل update استفاده کنم این دستورات غیر فعال هستند چرا؟ پیغام زیر رو میده

Error 1 'WindowsFormsApplication8.tel_gooyaDataSetTableAda pters.customerTableAdapter' does not contain a definition for 'update' and no extension method 'update' accepting a first argument of type 'WindowsFormsApplication8.tel_gooyaDataSetTableAda pters.customerTableAdapter' could be found (are you missing a using directive or an assembly reference?) E:WindowsFormsApplication8\WindowsFormsApplication 8\Form1.cs 83 39 WindowsFormsApplication8

amin tavakoli
چهارشنبه 22 تیر 1390, 00:54 صبح
دوست عزیز ممنون تونستم از کد بالا استفاده کنم اما برای آپدیت کردن از چه دستوراتی استفاده می کنید و همینطور اگر بخواهید اطلاعات رو از دو تا جدول پاک کنید چه باید کرد چون من از id برای شرط استفاده کرده ام که توی یکی از جدول ها کلید اصلی و دیگری کلید خارجی و کلید اصلی هم نداره و با این پیغام مواجع میشم
Can't perform Create, Update or Delete operations on 'Table(history_tell)' because it has no primary key.

mohamadz5
چهارشنبه 22 تیر 1390, 08:37 صبح
دوست عزیز ممنون تونستم از کد بالا استفاده کنم اما برای آپدیت کردن از چه دستوراتی استفاده می کنید و همینطور اگر بخواهید اطلاعات رو از دو تا جدول پاک کنید چه باید کرد چون من از id برای شرط استفاده کرده ام که توی یکی از جدول ها کلید اصلی و دیگری کلید خارجی و کلید اصلی هم نداره و با این پیغام مواجع میشم
Can't perform Create, Update or Delete operations on 'Table(history_tell)' because it has no primary key.

می تونید دکمه ای به گرید اضافه کنید و یک command name بهش اختصاص بدید مثلا ed

رویداد زیر را به گرید ویو اضافه کنید


OnRowCommand="dgReports_RowCommand"

البته می توانید یک کلید در جای دیگر تعریف کنید و در رویداد کلیک آن کد زیر را بنویسید

قطعه کد زیر را هم به کد اصلی اضافه کنید



protected void dgReports_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName.Equals("ed")) //edit item
{

DataClassesDataContext dc = new DataClassesDataContext();
var x = dc.FNews.SingleOrDefault(a => a.id == Convert.ToInt32(e.CommandArgument));
if (x == null) return;
editID = x.id;
txtTitle.Text = x.title;
txtDate.Text = x.ndate;
txtdesc.Text = x.body;
txtSource.Text = x.nSource;
}
dc.SubmitChanges();
}


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