Laden...

Mehrere Datagridviews mit einem EventHandler

Erstellt von Stuart vor 5 Jahren Letzter Beitrag vor 5 Jahren 880 Views
S
Stuart Themenstarter:in
2 Beiträge seit 2018
vor 5 Jahren
Mehrere Datagridviews mit einem EventHandler

Hallo zusammen,

ich habe eine Form mit 3 Datagridviews. Jedes Grid hat seinen eigenen CellContentClick EventHandler womit ich GridButtonColumns handeln möchte wie z.b. löschen einer Row oder Sprung zu meinem anderem Modul. Das ganze sieht wie folgt aus:


private BindingList<ModelA> _modelA = getData(A);
private BindingList<ModelB> _modelB = getData(B);;
private BindingList<ModelC> _modelC = getData(C);;

private void WireUpForm()
{
      dataGridView1.DataSource = _modelA ;
      dataGridView2.DataSource = _modelB ;
      dataGridView3.DataSource = _modelC ;

      dataGridView1.CellContentClick += DgvOneOnCellContentClick;
      dataGridView2.CellContentClick += DgvTwoOnCellContentClick;
      dataGridView3.CellContentClick += DgvThreeOnCellContentClick;
}

private void DgvOneOnCellContentClick(object sender, DataGridViewCellEventArgs e)
{
      var grid = sender as DataGridView;

      if (e.RowIndex >= 0)
      {
           if (e.ColumnIndex == dgvOneDelete.Index)
           {
               var modelA = grid.CurrentRow.DataBoundItem;
               DeleteModelA(modelA)
           }
       }
      else if(e.ColumnIndex == dgvOneGoto.Index)
           {
               // Logik
           }
}

private void DgvTwoOnCellContentClick(object sender, DataGridViewCellEventArgs e)
{
      // Das gleiche wie oben mit anderem Typ
}

private void DeleteA(ModelA a)
{
    _modelA.Remove(a);
}

private void DeleteB(ModelB b)
{
     _modelB.Remove(b);
}

Das Problem ist jetzt, das ich viel gleichwertigen Code habe, also bin ich auf die Idee gekommen den Grids einen einzigen Eventhandler zuzuweißen. Das sieht dann wie folgt aus.


private void WireUpForm()
{
      dataGridView1.CellContentClick += AllGridsOnCellContentClick;
      dataGridView2.CellContentClick += AllGridsOnCellContentClick;
      dataGridView3.CellContentClick += AllGridsOnCellContentClick;
}

private void AllGridsOnCellContentClick(object sender, DataGridViewCellEventArgs e)
{
var grid = sender as DataGridView;

if (e.RowIndex >= 0)
{
     If (grid == dataGridView1)
     {
         if (e.ColumnIndex == dgvOneDelete.Index)
         {
              // siehe oben
         }
     }
     If (grid == dataGridView2)
     {
         if (e.ColumnIndex == dgvTwoDelete.Index)
         {
              // siehe oben
         }
     }
}

Das sieht natürlich auch nicht wirklich toll aus.

Meine Frage diesbezüglich ist jetzt ob es eine Möglichkeit gibt dieses generisch zu implementieren ohne die ganzen If Else Bedienungen bzw. ob hier ein Pattern wie Strategy sinnvoll ist?

16.835 Beiträge seit 2008
vor 5 Jahren

Was soll dgvOneDelete sein ?

S
Stuart Themenstarter:in
2 Beiträge seit 2018
vor 5 Jahren

Hallo

das ist ein DataGridViewButton.