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

حذف نشدن داده از دیتاگرید به وسیله پروسیجر

0 امتیاز

  سلام دوستان.

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

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

این پروسیجرم

CREATE PROCEDURE [dbo].[SPDeleteBook]
	@id int
AS
	begin
		set nocount on
		delete from tbl_Book where Id=@id
	end

 

این هم کدC#

private void button2_Click(object sender, EventArgs e)
        {
            var q = db.tbl_Book.Take(1);
                if (q.Count()== 0)
                {
                    MessageBox.Show("جدول خالی است");
                }
            else
	{
        int id = dgw1.SelectedRows[0].Index;
        db.SPDeleteBook(id);
        db.SaveChanges();
        dgw1.DataSource = db.SPselect();
            
	}
        }

 

سوال شده اسفند 28, 1392  بوسیله ی rahgozar (امتیاز 224)   18 26 35

1 پاسخ

+2 امتیاز
 
بهترین پاسخ

سلام.

یکی دو مورد رو میگم  : اونجا که ایندکس استفاده کردید، اینو باید مد نظر داشته باشید که ایندکس شماره اون سطر رو برمیگردونه نه ID مربوط به اون رکورد.

این کدی که شما نوشتید در صورتی صحیح خواهد بود که id ها دقیقا متناظر با شماره سطرها باشن که در خیلی از موارد اینطوری نیست. برای بدست آوردن id هر رکورد، همون کد خودتون رو بصورت زیر اصلاح کنید (در کد زیر فرض شده ستون دوم گرید(با اندیس 1) ستون id شما هست).

int id = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells[1].Value);

مورد دوم اینکه زمانی که از sp به این شکل استفاده میکنید دیگه نیازی به دستور savechanges ندارید.

 

پاسخ داده شده اسفند 29, 1392 بوسیله ی veniz2008 (امتیاز 2,083)   1 5 21
انتخاب شد فروردین 4, 1393 بوسیله ی rahgozar
ممنون استاد گرامی. فقط منظورتون از این نوع پروسیجر چیه؟ و  کلا نیاز به savechang ندارم  یا فقط در دستور delete؟
اما من چه مقدار cells رو یک بدم و چه صفر بدم  این ارور رو میده!!؟؟
http://upload7.ir/imgs/2014-03/65252166946369457659.png
به چند روش میشه sp هایی رو که ساختیم به برنامه معرفی کنیم.
یه راه های دیگه ای هم وجود داره. مثلا در EDM Designer روی موجودیت مورد نظر که براش sp تعریف کردیم راست کلیک میکنیم و از گزینه Stored Procedure Mapping اقدام به اضافه کردن spها میکنیم. در چنین حالتی از savechanges استفاده میکنن. (البته سبک کدنویسی کاملا متفاوت میشه و شبیه به حالتی میشه که بصورت معمول عملیات های مورد نظر مثل درج و حذف و ... رو انجام میدیم).
خطا داره میگه که ستونی که بهش دادی (یا سطر) خارج از محدوده گرید هست.
مثلا 3 ستون دارید ولی اندیس 3 (اندیس 3 معادل ستون 4 میشه) بهش دادید. یا شماره سطری رو دارید استفاده میکنید که خارج از محدوده هستش.
این موارد رو به دقت چک کنید. مطمئن باشید مشکلتون حل میشه.
موفق باشید.
...