+1 امتیاز

سلام ... من کد دکمه ی ویرایش رو نوشتم ولی وقتی می خوام بر روی یک رکورد خاص در دیتا گرید ویرایش انجام بدم بر روی تمام رکورد های ثبت شده تاثیر میزاره . باید چیکار کنم ؟

به طور مثال : من دیتا گریدی به شکل زیر طراحی کردم :

 

حالا من اگر بخوام اسم سجاد (در سطر سوم ) رو فقط در فیلد نام بنویسم  و فیلد نام خانوادگی رو خالی بزارم  و بر روی دکمه ی ویرایش بزنم به شکل زیر در می یاد  : (مثلا من می خوام  تبدیل شه به امین هدایتی )

هیمن طور که میبینید اسم امین هست ولی نام خانوادگی ش که هدایتی باشه پاک شده باید چیکار کنم ؟

کد سی شارپ من :


            SqlCommand cmd = new SqlCommand("updatenewdatabase",con);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@name",TXT_name.Text);
            cmd.Parameters.AddWithValue("@family", TXT_family.Text);
            cmd.Parameters.AddWithValue("@id", dataGridViewX1.CurrentRow.Cells[0].Value.ToString());
             

            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();

من فقط میدونم که باید کدی مثل این :

cmd.Parameters.AddWithValue("@id", dataGridViewX1.CurrentRow.Cells[0].Value.ToString());

بنویسم . اما چجوریش رو نمیدونم ؟

و اینم کد های sql :

create proc updatenewdatabase
@name nvarchar (50) ,
@family nvarchar (50),
@id int
as
begin
Update tbl_newdatabase set  lastname = @family  where ID = @id
end
go 

به حساب من اینا رو باید تو دانشگاه یاد بگیرم ولی....

بسته شده
سلام من یه مشکل اساسی دارم اگه هرچه سریعتر کمکم کنید ممنون میشم .

من برای ویرایش اطلاعاتم در گرید ویو نمیخوام ار textbox استفاده کنم و میخوام از template خود گرید ویو استفاده کنم . چه کدی رو باید بنویسم.. ممنون میشم اگه هرچه سریعتر کمکم کنید.
توسط (104 امتیاز) 2

3 پاسخ

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

سلام.

من جدول شما رو شبیح سازی کردم. فیلدهای جدول رو firstName, lastName , ID در نظر گرفتم.

پروسیجر:

create proc updatenewdatabase
@name nvarchar (50) ,
@family nvarchar (50),
@id int
as
begin
Update tbl_newdatabase set  lastname = @family, firstName = @name where ID = @id
end

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

کپی کد شما

            SqlCommand cmd = new SqlCommand("updatenewdatabase", con);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@name", TXT_name.Text);
            cmd.Parameters.AddWithValue("@family", TXT_family.Text);
            cmd.Parameters.AddWithValue("@id", dataGridView1.CurrentRow.Cells[0].Value.ToString());
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();

و جواب صحیح گرفتم.

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

و در برنامه نباید فیلد نام ویرایش بشه یه نگاهی به جدول بندازید. و فیلد نام رو هم به روز کنید.

دوست عزیز علاوه بر پروسیجر ایراد در همین خط کد هم هست.

dataGridView1.CurrentRow.Cells[0].Value.ToString();

شما به جای عدد صفر نام ستونی از دیتا گرید ویو رو که Id در اون قرار داره بنویسید.

dataGridView1.CurrentRow.Cells["Id"].Value.ToString();

و اگر خواستید که عدد رو به جای نام ستون قرار بدین ابتدا ایندکس ستون آی دی رو پیدا کنید و سپس این شماره ایندکس رو به جای اسم بزارید.

رو یکی از سلولهای ستون شماره مثلا شماره 27 کلیک کنید و این کد رو بنویسید و اجرا کنید تا ایندکس ستون رو بدست بیارید.

            MessageBox.Show(dataGridView1.CurrentCell.ColumnIndex.ToString());

 

ویرایش شده توسط
توسط (2,595 امتیاز) 5 15 90

سلام ... من نتونستم مشکل رو از ریشه حل کنم ولی روش زیر به نوعی میانبر حساب میشه .

برای جلو گیری از این خطا باید فیلد های جدولم رو به تکس باکس ها تزریق می کردم .

به این روش :

1- ابتدا وارد رویداد CellContentClick شده . (با دابل کلیک کردن بر روی دیتا گرید ویو  وارد رویداد CellContentClick  می شویم  ).

2- به این روش فیلد های جدول رو به تکس باکس ها تزریق می کنبم .

txtlastnamestudent.Text = gridviewStudent.CurrentRow.Cells["lastname"].Value.ToString();
           txtnameStudent.Text = gridviewStudent.CurrentRow.Cells["firstname"].Value.ToString();

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

موفق باشین...

ویرایش شده توسط
توسط (206 امتیاز) 3 10 32
+2 امتیاز

سلام مجدد به شما دوست عزیزم

بهترین راه اینه که شما وقتی روی ردیف گرید ویو خودت دابل کلیک میکنی اطلاعات ردیف مورد نظر بشینه توی فیلدهای گروپ باکس مربوط به ویرایشت...و زمانی که دابل کلیک میکنی ID ردیف مربوطه رو هم در یک متغیر ذخیره کنی...

تعریف متغیر :

int IDGroup = 0; //  public partial class  در قسمت 

در رویداد CellMouseDoubleClick

 TxtGroupName.Text = GrdGroupName.CurrentRow.Cells["GroupName"].Value.ToString(); //انتقال مقدار ردیف مورد نظر در تکس باکس مربوطه


 IDGroup = Convert.ToInt32(GrdGroupName.CurrentRow.Cells["GroupID"].Value);// کد گروه رو در متغیر ذخیره کردم برای استفاده در دکمه ویرایش

و حالا در دکمه ویرایشت

 SqlCommand cmd = new SqlCommand("UpdateTblGroup", con);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@GroupName", TxtGroupName.Text.Trim());
            cmd.Parameters.AddWithValue("@GroupID", IDGroup);// ردیفش رو ذخیره کردم GroupID همون متغیریست که موقع دابل کلیک روی ردیف گریدویو IDGroup

بهتره هم نام و هم فامیلی رو از دیتاگرید ویو بریزی توی تکس باکس های مربوطه در قسمت ویرایشت... و اگه نمیخوای ویرایشش کنی Enable اونو در رویداد CellMouseDoubleClick  به false تغیر بده...

چرا شما کد های مربوط ذخیره ی  کد گروه رو در رویداد CellmouseDoubleclick می نویسید ؟

آخه من کدهای مربوط به انتقال ردیف در تکس باکس و ذخیره ی اون رو در این بخش مینوشتم :RowHeaderMouseDoubleClick
توسط (206 امتیاز) 3 10 32
کاربرا اول روی ردیف دابل کلیک میکنن... یه تجربست...
توسط (466 امتیاز) 7 26
0 امتیاز

سلام من یه مشکل اساسی دارم اگه هرچه سریعتر کمکم کنید ممنون میشم .

من برای ویرایش اطلاعاتم در گرید ویو نمیخوام ار textbox استفاده کنم و میخوام از template خود گرید ویو استفاده کنم . چه کدی رو باید بنویسم.. ممنون میشم اگه هرچه سریعتر کمکم کنید.

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

http://www.w3-farsi.com/%D8%A7%D9%86%D8%AC%D8%A7%D9%85-%D8%B9%D9%85%D9%84%DB%8C%D8%A7%D8%AA-%D9%87%D8%A7%DB%8C-%D8%A7%D9%86%D8%AA%D8%AE%D8%A7%D8%A8-%D8%8C-%D8%AF%D8%B1%D8%AC-%D8%8C-%D8%AD%D8%B0%D9%81-%D9%88-%D9%88%DB%8C/

مثلا کد قسمت ویرایش آموزش بالا را می تونید به جای رویداد click دکمه توی رویداد CellEndEdit  دیتاگرید بنویسید.
توسط (6,480 امتیاز) 6 17 129
من دارم با asp.net ،،، سی شارپ مینویسم، و میخوام از template edit که داخل خوده گرید ویو هست استفاده کنم، پایگاهم هم sql server هست
توسط (104 امتیاز) 2
سوال جدید

2,337 سوال

2,871 پاسخ

3,725 دیدگاه

3,921 کاربر

دسته بندی ها

...