ذخیره اطلاعات در دیتابیس از طریق دیتا گرید در WPF
من از سی شارپ WPF استفاده میکنم و یک تک جدول خیلی ساده دارم که فقط نام و تلفن در اون ذخیره میشه با روش Entity Framework DB First
در SQL Server 2014
من کاری که میخوام انجام بدم اینکه که عملیات درج , بروزرسانی (تغییر) و حذف رو مستقیما در خود دیتاگرید انجام بدم بدون TextBox یا دکمه ای مثل Excel به این شکل :
میخوام این رو به بهترین و سریع ترین راه انجامش بدم
پس باید موقعی که کاربری توی هر سلولی از یک سطر در دیتا گرید ویو اطلاعاتی وارد کرد و بعد از روی اون سطرجابه جا شد (Tab or Enter) اطلاعات رو باتوجه به سطر مربوطه و آیدی اون سطر , در جدول ذخیره کنه
من اومدم این کار رو توی رویداد CellEditEnding انجام بدم منتها خودم یکم سردرگم هستم که دقیقا کدش چی میشه ؟
private void DGR_Formy_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
if (DGR_Formy.SelectedItem != null && DGR_Formy.SelectedItems != null)
{
//این خط فقط سطر اِدیت شده رو نشون میده
var DtValue = DGR_Formy.ItemContainerGenerator.ItemFromContainer(e.Row);
var WhatValue = string.Empty;
FrameworkElement element_1 = DGR_Formy.CurrentColumn.GetCellContent(e.Row);
if (element_1.GetType() == typeof(TextBox))
{
WhatValue = ((TextBox)element_1).Text;
}
Telbook LocationTel = (Telbook)DGR_Formy.SelectedItem;
Telbook telbook = new Telbook()
{
ID = LocationTel.ID,
Name = WhatValue,
Tel = LocationTel.Tel
};
dbms.SaveChanges();
}
}
این کد های بالا درست نیست فقط جهت یک راهنمایی گذاشتم چون دقیقا نمیدونم چطور باید پیاده سازی کنم.
مشکل در کد بالا اینه که نمیدونم چطور بگم بررسی کن هر آیتمی که تغییر کرده همون رو آپدیت کن (سطری که تغییر پیدا کرده بروزرسانی و یا سطر جدید درج شده ذخیره بشه)
لطفا راهنمایی بفرمایید
لینک مرتبط با موضوع : https://social.technet.microsoft.com/wiki/contents/articles/53914.wpfentity-framework-core-primer-c.aspx
پاسخ هوش مصنوعی
برای پیاده سازی امکان ذخیره سازی خودکار اطلاعات در دیتاگرید و استفاده از Entity Framework به روش DB First، می توانید از رویداد CellEditEnding
به همراه بررسی تغییرات استفاده کنید. در زیر یک پیاده سازی بهبود یافته ارایه می شود که به شما کمک می کند تا تغییرات را به درستی شناسایی و آنها را در دیتابیس ذخیره کنید.
private void DGR_Formy_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
if (DGR_Formy.SelectedItem != null)
{
// به دست آوردن سطر و ستونی که تغییر کرده است
var editedRow = (Telbook)DGR_Formy.SelectedItem;
var column = e.Column.Header.ToString();
var cellContent = e.EditingElement as TextBox;
// اگر محتوا یک TextBox است، محتوای جدید را دریافت کنید
if (cellContent != null)
{
switch (column)
{
case "Name":
editedRow.Name = cellContent.Text;
break;
case "Tel":
editedRow.Tel = cellContent.Text;
break;
}
}
// اعمال تغییرات به دیتابیس
dbms.Entry(editedRow).State = EntityState.Modified;
dbms.SaveChanges();
}
}
در این پیاده سازی:
- ابتدا بررسی می شود که آیا یک آیتم انتخاب شده است.
- سطر و ستونی که در حال ویرایش است شناسایی می شود.
- بر اساس نام ستونی که تغییر کرده است، مقدار جدید به سطر مربوطه نسبت داده می شود.
- سپس وضعیت سطر به
Modified
تغییر می کند و تغییرات در دیتابیس ذخیره می شوند.
این روند به شما کمک می کند تا به سادگی عملیات درج و بروزرسانی اطلاعات را در دیتاگرید انجام دهید.
این پروژه رو قبلا انجام دادم برای یه کاری اما دقیقا چیزی که شما میخواید نیست. ولی به موضوع شما نزدیکه. سورس و یک فیلم رو براتون قرار میدم شاید به دردتون بخوره. ضمنا با wpf هم هست.
در این پروژه یک پنجره داریم که یک data grid داخلش هست. در این جدول نام و نام خانوادگی رو نمایش دادیم. روی هر سطری کلیک کنید پنجره دیگه ای باز میشه که میتونید اطلاعات رو ویرایش کنید. خودم فعلا فرصت ندارم دقیقا چیزی که شما میخواید رو انجام بدم ولی فکر میکنم با کمی تغییر بتونید انجامش بدید.
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- حذف کامل یک رکورد در جدول ریلیشن شده
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- مقایسه ساختار دو دیتابیس در Sql Server
- اشکال در ایجاد کلید خارجی در Sql Server
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf