【问题标题】:C# Visual Studio: How do I update a DB from Edit with DataGridView using LINQ?C# Visual Studio:如何使用 LINQ 从 Edit with DataGridView 更新数据库?
【发布时间】:2016-06-20 14:58:16
【问题描述】:

我有一个带有 DataGridView 的 WinForms 表单窗口。它使用 Linq 从 SQL Server Express 数据库中提取数据,并将其正确显示在 DataGridView 列中。我在属性中设置了它以允许编辑。当我在运行时编辑和更改字段时,如果我指定一个列名,它只会更新数据库。这效果不好,因为我需要它来更新我编辑的列,而不是硬编码的列。它需要是动态的。看到站点旁边的cmets。???我可以从 site.whatever 中手动选择一个列名,但这不是我想要的。我希望能够从我设置的字符串中执行 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文件截图:

【问题讨论】:

    标签: c# winforms linq datagridview sql-server-express


    【解决方案1】:

    你可以试试反射:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-20
      • 2017-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多