2016-08-28 4 views
0

私は最後の列のステータスで自分のテーブルIDのデータグリッドビューを持っています。Datagrid上のSelectedRowsのみが影響を受けます

私は、データグリッドビューで10行のうち5行を選択したとしましょう。

私がしようとしていることは、ボタンをクリックしたときに、選択された行だけが影響を受け、ステータスが変更されることです。

私はこのコードと他のコードを試してみましたが、どれも動作していないようです。私はC#で新しくなったので、誰かが私を助けることができるでしょうか?

private void button_Click(object sender, EventArgs e) 
    { 
     int count = dataGridView1.SelectedRows.Count; 
     for (int i = count-1; i >=0; i--) 
     { 

      if (i == dataGridView1.SelectedRows.Count) 
      { 
       Identification it = new Identification(); 
       it.Status = "ACTIVE"; 
       Repository.Identification_UpdateStatus(it); 
      } 
     } 
    } 

答えて

1

あなたは、それぞれが コードオブジェクトDataGridViewRow取得する dataGridView1.SelectedRowsをループする場合があります

foreach(DataGridViewRow row in dataGridView1.SelectedRows) 
{ 
    // implement your logic here 
    // update selected rows by making changes to 'row' object 
} 
+0

ご返信が遅れました。それは男だった!ありがとう。 – Leir

1

これを行うための適切な方法は、データバインディングを使用することですが。あなたが 'Identification'のようなドメインオブジェクトを使用しているので、ここでは適切なものになります。

public partial class Form1 : Form 
{ 
    //Your form 
    public Form1() 
    { 
     InitializeComponent(); 
     //Wrap your objects in a binding list before setting it as the 
     //datasource of your datagrid 
     BindingList<Identification> ids = new BindingList<Identification> 
     { 
      new Identification() { status="NEW" }, 
      new Identification() { status="NEW" }, 
       new Identification() {status="NEW" }, 
     }; 
     dataGridView1.DataSource = ids; 
    } 

    private void btnChangeStatus_Click(object sender, EventArgs e) 
    { //Where the actual status changing takes place 
     foreach (DataGridViewRow row in dataGridView1.SelectedRows) 
     { 
      var identifaction = row.DataBoundItem as Identification; 
      identifaction.status = "VERIFIED"; 
     } 

    } 
    //Model: Class that carries your data 
    class Identification: INotifyPropertyChanged 
    { 

     private string _status; 
     public string status 
     { 
      get { return _status; } 
      set 
      { 
       _status = value; 
       NotifyPropertyChanged("status"); 
      } 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 

     private void NotifyPropertyChanged(string name) 
     { 
      if (PropertyChanged != null) 
       PropertyChanged(this, new PropertyChangedEventArgs(name)); 
     } 

    }  

} 
関連する問題