PDA

View Full Version : ویرایش و حذف در datagrid view



mehdiDER_5
جمعه 31 فروردین 1386, 17:42 عصر
باسلام

من میخواهم در روی خود datagridview بتوانیم با انتخاب هر کلمه ای که کاربر وارد کرده است آن را ویرایش کنم و دکمه را هم به این امر اختصاص دادهام البته منظور من از ویرایش ، ویرایش یا همان update از بانک است و همینطور کاربر با انتخاب سطری در خود datagridview آن را به وسیله دکمه ای که ما برای آن تعریف می کنیم حذف کند ضمناً من از dataadapter , dataset ااستفاده میکنم و کد زیر را نوشته ام اما error میدهد .
update required the updaete command to have a connection object.the connectiuon property of the update command has not been initiolized.

برنامه را هم ضمیمه میکنم .

nooshin100
جمعه 31 فروردین 1386, 22:05 عصر
اگر منظور شما رو درست فهمیده باشم ، اگر برای update کردن command ای مثلا به نام cmd تعریف کرده باشید باید دستور زیر را هم بنویسید
cmd.connection=sqlconnection1(یا هر connection ای که تعریف کرده باشید)

sh
شنبه 01 اردیبهشت 1386, 00:23 صبح
کد دکمه حذف رو بنویس

mehdiDER_5
شنبه 01 اردیبهشت 1386, 15:21 عصر
با سلام و تشکر از دوستان محترم

من برای دکمه حذف کدی ننوشته ام و فکر نمیکنم با دستور update چندان متفاوت باشد

منظور من این است که من در گرید ویو در روی یکی از خانه ها که مثلاً نام فرد علی است کلید کنم و آن را به اسم دیگری تغییر دهم و یا مثلاً یک سطر را از گرید ویو انتخاب کنم در روی خود گرید ویو و آن را با دکمه ای که من برایش تعریف میکنم و نه با delete خود ویندوز آن را حذف کنم منظور از حذف و ویرایش حذف و ویرایش از بانک است
برنامه را هم اینجا گذاشتم

موفق باشید

لطفا کد برنامه بگذارید

mehdiDER_5
شنبه 01 اردیبهشت 1386, 19:28 عصر
باسلام


با با بالاخره یکی نمیخواد جواب بده .................................................. ........

sh
شنبه 01 اردیبهشت 1386, 21:17 عصر
اول که برنامه ای اینجا نگذاشتی
دوم اینکه وقتی میخوای ردیف رو با دکمه خودت حذف کنی باید براش کد بنویسی و با Update فرق داره
سوم اینکه امکان حذف توسط کاربر رو در پروپرتی ها ی گرید False کنی

mehdiDER_5
شنبه 01 اردیبهشت 1386, 22:15 عصر
با سلام
با تشکر از جواب شما دوست عزیز من همان کد حذف را میخواهم که کاربر با کلید بر روی یک سطر در روی خود گرید ویو بتواند آن را حذف کند و یا با کلید بر روی یکی از خانه های گرید در هر جای گرید ویو بتواند آن را تغییر و با زدن دکمه update بانک را ویرایش کند و تغییرات را در گرید ویو مشاهده کند .راست گفتی برنامه را من سو رسش را درست rar نکردم حالا گذاشتم ممنون میشوم اگر کمکم کنید چون برای یک پروژه احتحاج به این امر دارم اگر کد نمونه داری بفرست من
چیزهائی که پیدا کردم اینهاست

Me.DataGiridView1.SelectedRows(0).


datagridviewname.currentcell.rowindex یا

مثلاً من کاربر بر روی گرید ویوی کلید میکند و آن خانه را انتخاب میکند و آن را ویرایش میکند برای اینکه ما بفهمیم کاربر در کدام نقطه کلید کرده است من این راه را انتخاب کردم

cmdupdate.commandtext=update table set id=@id where id=datagridviewname.currentcell.rowindex
cmdupdate.paramere .addwithvalue("@id,datagridviewname.curentcell.rowindex

این نوع update را من برای textbox به جای گرید ویو نوشته ام یعنی یک جستجو گذاشته بودم و اطلاعات را در داخل textbox هایشان میریختم و آنها را تغییراتی میدادم و کلید update را میزدم حال برای این نوع برنامه با گرید ویو این نوع برنامه را نوشتهام با dataset , dataadapter
که سورسش را گذاشتم و برای delete هم همین کار را میخواهم بکنم کاربر سطری را در گرید ویو انتخاب و آن را با دکمه ای که من برای آن تعریف میکنم ار بانک حذف کند مشکل من اینجاست که من سطر انتخاب شده را چطور تشخیص دهم برای کلید حذف
cmddelete.commandtext=delete from table where id

مشکل من این است که حالا جلوی شرط خودم چه جیزی قرار بدهم اگر text box بود که خیلی راحت بور میگفتیم سطری را از بانک حذف کن که id=textbox ورودی کاربر باشد حال آن سطری را که کاربر در گرید ویو انتخاب میکند چطوری در شرط delete قرار بدهم
برنامه زیر هم error میدهد که error اش را برایتان نوشتم امیدوارم توضیحات کافی باشد

با ز هم ممنونم

فقط سریع کمکم کنید اگر امکان دارد

مهدی نان شکری
یک شنبه 02 اردیبهشت 1386, 00:26 صبح
دوست من راهی که می رید به نظر من کمی مشکلات داره. (البته باید آقای عباسپور من رو ببخشند که در محضرشون اظهار نظر می کنم.)
ولی شما اومدید با شماره ریف رکورد مورد نظرتون رو پیدا می کنید که با سورت کردن گرید و ... مشکلات زیادی پیش میاد.
اگه می خوایید خودتون دستی کد بنویسید بهتره یه فیلد کلید اصلی قرار دهید وگرنه بهتره برای آپدیت و حذف مثال زیر رو نگاه کنید.

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

sh
یک شنبه 02 اردیبهشت 1386, 15:20 عصر
البته قبلش حالت MultiSelect رو هم False کن


If Me.DataGridView1.RowCount > 0 Then
Dim x As Int32 = 0
Dim n As String = ""
For Each SelectedRow As DataGridViewRow In DataGridView1.SelectedRows
n = SelectedRow.Cells(0).Value.ToString
x = SelectedRow.Cells(1).Value
Next

If MessageBox.Show("آیا کالای " + n + " حذف شود ؟ ", "حذف رکورد", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.Yes Then
Try
Me.KalaTableAdapter.Deletebykalacode(x)
fillgrid()
Catch ex As OleDb.OleDbException
MessageBox.Show(ex.Message.ToString, "خطا", MessageBoxButtons.OK, MessageBoxIcon.Warning)
End Try
End If
End If

mehdiDER_5
یک شنبه 02 اردیبهشت 1386, 22:36 عصر
با سلام

من کد update را که اصلاح کرده بودید را در برنامه گذاشتم (هنوز کد حذف را استفاده نکردم )بعد روی یکی از خانه های گرید کلید کردم و آن را تغییر دادم و بعد از زدن کلید update این error را داد
dynamic sql generation for the update command is not supported againt a select command that does not return any key colums information

لطفاً راهنمائی کنید

برنامه را هم گذاشتم

مهدی نان شکری
دوشنبه 03 اردیبهشت 1386, 00:54 صبح
با سلام
این خطا به این دلیل هست که در دیتابیس شما هیچ کلید اصلی موجود نیست.
لطفا یکی از فیلد هاتون رو کلید اصلی قرار دهید.

mehdiDER_5
دوشنبه 03 اردیبهشت 1386, 21:21 عصر
با سلام و تشکر از دوستان

کلید update درست شد اما برای حذف من این یک خط را نفهمیدیم وبرای برنامه چه چیزهائی باید توضیح دهم تا این یک خط را بفهمد
me.kalatableadapter.deletebykalacode(x
)

dim kalatableadapter as ajradatasettableadapter.moshakasattableadapter

که ajar دیتابیس من و moshakasat جدول من است

حال این delete by code را چطور میتوان تعریف کرد که بتوان در جلوی kalaadapter نوشت

با تشکر

sh
دوشنبه 03 اردیبهشت 1386, 21:39 عصر
شما باید توی دیتا ست روی جدول مورد نظر راست کلیک کرده و کوئری حذف رو اضافه کنید و یه پارامتر بع هنوان کد کالا در نظر بگیری

mehdiDER_5
دوشنبه 03 اردیبهشت 1386, 22:15 عصر
با تشکر از پاسخ سریع شما دوست عزیز

من اینکار را کردم
me.kalatableadapter.deletequery(x)
اما روی x داخل پرانتز ارور داد ارور این است
too many argument to public overridable overload function deletequery () as integer

با سپاس

mehdiDER_5
سه شنبه 04 اردیبهشت 1386, 15:01 عصر
با سلام


با با یکی نیست جواب من را بده

mehdiDER_5
سه شنبه 04 اردیبهشت 1386, 20:36 عصر
با سلام


چرا جوابم را نمیدهید من روی یک پروژه به این کلید حذف احتیاج دارم تمام توضیحات را هم قبلاً دادم

یکی کمک کنه

nooshin100
سه شنبه 04 اردیبهشت 1386, 21:25 عصر
این هم همون فایلی که بهتون گفتم....

Devilprogramer
پنج شنبه 06 اردیبهشت 1386, 22:52 عصر
ببین این خطا میگه دستور آپدیت واسه sqldataadapter ات تعریف نکردی، می تونی آپدیت کامند براش خودت تعریف کنی یا اینکه بگی کامند بیلدر از رو دیتا آداپترت این کار رو کنه
مثلاً فرض کن da دیتا آداپترته با کامند بیلدر می تونی براش بسازی


SqlConnection conn = new SqlConnection("server=.; database=test; uid=sa; pwd=;");
string cmdStr = "select * from article";
SqlDataAdapter da = new SqlDataAdapter(cmdStr, conn);

DataSet ds = new DataSet();
da.Fill(ds, "Article");

SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(da);
da.InsertCommand = cmdBuilder.GetInsertCommand();
da.UpdateCommand = cmdBuilder.GetUpdateCommand();
da.DeleteCommand = cmdBuilder.GetDeleteCommand();

حالا اینم یه تستی بکن شاید اشکال از کامنداییه که خودت تعریف می کنی!!