簡體   English   中英

C#Visual Studio:如何使用LINQ使用DataGridView從Edit更新數據庫?

[英]C# Visual Studio: How do I update a DB from Edit with DataGridView using LINQ?

我有一個帶有DataGridView的窗體WinForms窗體窗口。 它使用Linq從SQL Server Express數據庫中提取數據,並將其正確顯示在DataGridView列中。 我在屬性中設置了允許編輯。 當我在運行時編輯和更改字段時,只有指定一個列名,它才會更新數據庫。 這不能很好地工作,因為我需要它來更新我編輯的列,而不是一個硬編碼的列。 它必須是動態的。 請參閱網站旁的評論。 我可以從site.what中手動選擇一個列名,但這不是我想要的。 我希望能夠從我設置的字符串中執行Site.columnname。

我看到其他示例使用數據加載和/或編輯DataGridView,但是這些示例未使用LINQ。

我的表單加載代碼:

    public partial class EditImage : Form
    {
        SQL sqlLink = new SQL();
        CustomMessageBox msg = new CustomMessageBox();

    public EditImage()
    {
        InitializeComponent();
    }

    private void EditImage_Load(object sender, EventArgs e)
    {
        dgImageView.DataSource = sqlLink.getImageList();
        dgImageView.AutoResizeColumns();
        dgImageView.AutoResizeRows();
    }

    private void dgImageView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
        int rid = e.RowIndex;
        int dbrid = rid + 1;
        int cid = e.ColumnIndex;
        string change = dgImageView[cid, rid].Value.ToString();
        string columname = dgImageView[cid, rid].OwningColumn.Name;

        using (var dc = new DbLink())
        {
            var site = (from img in dc.images where img.id == dbrid select img).SingleOrDefault();

            if (site != null)
            {
                try
                {
                    site.??? = change;
                    dc.SubmitChanges();
                    dgImageView.EndEdit();
                }
                catch (Exception ex)
                {
                    msg.Text("Error", ex.ToString(), MessageBoxButtons.OK);
                }
            }
        }
    }

從SQL類檢索數據源的代碼:

    public IQueryable getImageList()
    {
        return selectImageList();
    }

    private IQueryable selectImageList()
    {
        DbLink dbl = new DbLink();
        image tl = new image();

        var results = from imgs in dbl.images
                      select imgs;

        return results;
    }

dbml文件的屏幕截圖:

在此處輸入圖片說明

您可以嘗試反射:

var changedColumn = typeof(image).GetProperty(columnName);
changedColumn.SetValue(site,change);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM