2016-06-20 3 views
0

У меня есть окно формы формы WinForms с DataGridView. Он извлекает данные из базы данных SQL Server Express с помощью Linq и правильно отображает их в столбцах DataGridView. Я установил его в свойствах, чтобы разрешить редактирование. Когда я редактирую и изменяю поле во время выполнения, он будет обновлять базу данных только в том случае, если я укажу одно имя столбца. Это не работает, потому что мне нужно обновить отредактированный столбец, а не один жесткий код. Он должен быть динамичным. См. Комментарии рядом с сайтом. ??? Я могу выбрать имя столбца вручную с сайта. Что бы это ни было, но это не то, что я хочу. Я хочу, чтобы иметь имя Site.column из строки, которую я установил.C# Visual Studio: как мне обновить базу данных с помощью DataGridView с помощью LINQ?

Я вижу другие примеры загрузки и/или редактирования 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 для извлечения DataSource:

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:

enter image description here

ответ

1

Вы можете попробовать с отражением:

var changedColumn = typeof(image).GetProperty(columnName); 
changedColumn.SetValue(site,change); 
Смежные вопросы