2016-06-20 2 views
0

私はDataGridViewでフォームWinFormsフォームウィンドウを持っています。 Linqを使用してSQL Server Expressデータベースからデータを取得し、DataGridView列に適切に表示します。私はプロパティを編集できるように設定しました。実行時にフィールドを編集して変更すると、列名を1つ指定するとデータベースが更新されます。これは、ハードコーディングされたものではなく、編集した列を更新する必要があるため、うまく機能しません。それは動的である必要があります。サイトの隣のコメントを参照してください。???私はsite.whateverから列名を手動で選択できますが、それは私が望むものではありません。私は設定した文字列からSite.columnnameを実行できるようにしたい。C#Visual Studio:LINQを使用してDataGridViewで編集からDBを更新するにはどうすればよいですか?

DataGridViewにデータをロードまたは編集する他の例がありますが、これらの例ではLINQを使用していません。

マイフォームの負荷コード:SQLクラスから

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); 
       } 
      } 
     } 
    } 

コードを取得するためのデータソース:

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); 
関連する問題