بسم الله الرحمن الرحیم
سلام
مدتی بود که هنگام حذف رکورد با ایراد زیر مواجه میشدم:
کد:
Update requires a valid DeleteCommand when passed DataRow collection with deleted rows.
احتمالا برنامه نویسان دیگری هم با این مشکل مواجه شده اند
اغلب کسانی که این مشکل را دارند متد Delete در tableadaptor آنها نیز وجود ندارد
راه حل برطرف کردن مشکل:
از منوی Data گزینه Show Data Sources را انتخاب کنید
در پنجره DataSource روی Dataset مورد نظر کلیک راست کرده و گزینه Edit Dataset with Designer را انتخاب کنید. با انتخاب این گزینه پنجره Databasename.xsd باز میشود
TableAdapter جدولی را که میخواهید رکوردی را از آن حذف کنید انتخاب کنید
با فشردن کلید F4 وارد پنجره Properties شوید.همانطور که مشاهده میکنید مقدار خاصیت DeleteCommand = (none) می باشد
مقدار New را برای این خاصیت انتخاب کنید.همانطور که مشاهده می کنید مقدار این خاصیت به (DeleteCommand) تغییر یافت
حال روی مثلث کوچک سمت چپ این خاصیت کلیک کنید تا گزینه های فرزند را مشاهده کنید.
گزینه Parameters را انتخاب کرده و سپس روی کلید ... کلیک کنید
به تعداد فیلدهایی که می خواهید Delete نسبت به مقدار آنها انجام گیرد پارامتر اضافه کنید.توجه کنید که خاصیت SourceColumn آنها مساوی نام فیلد مورد نظر باشد
در صورتی که از متد DataAdapter.delete استفاده ای ندارید و فقط می خواهید ردیف ها را با شماره آنها با استفاده از Dataset.TableName.Row(i).Delete حذف کنید حداقل باید یک پارامتر تعریف کنید، مهم نیست SourceColumn این پارامتر به کدام فیلد اشاره میکند
حالا مقدار CommandType را به Text ست کنید تا CommandText را بنویسیم
CommandText را انتخاب کرده و روی کلید ... کلیک کنید.تا پنجره Query Builder باز شود
در پنجره AddTable میتوانید جدول مورد نظر را انتخاب کنید(همان جدولی که Adapter آن را انتخاب کرده اید)
در قسمت Column نام فیلد یا فیلدهایی که میخواهید Adapter نسبت به محتویات آنها عمل Delete را انجام دهد را انتخاب کنید.
در قسمت Table هم نام جدول نوشته خواهد شد
در قسمت Filter عبارت [CODE]=؟[/CODE] را تایپ کنید
برای اطمینان از صحت عملکرد SQL روی دکمه Execute Query کلیک کنید، اگر مشکلی وجود نداشته باشد جدول Query Parameters نمایش داده خواهد شد
روی OK کلیک کرده و به قسمت کدنویس بروید
حالا مشکل کد نویسی شما حل شده و می توانید از متد TableAdapter.Delete نیز استفاده کنید، انشاالله
این نوشته ها تجربیات خودم بوده و خواهشا اگر درست و کافی نیست اساتید محترم راهنمایی و تکمیل کنند
آخرین ویرایش: