Sor megszerzése GridView RowCommandnál

Ha egy GridView valamelyik oszlopába gombokat teszünk, akkor a RowCommand esemény nagyon praktikus, mert az eseménykezelő CommandName és CommandArgument tulajdonságai segítségével könnyen meg tudjuk vizsgálni, hogy melyik sorban, melyik gombra kattintott a felhasználó. A CommandArgument tulajdonságot általában az adott rekord kulcs oszlopához szoktuk kötni, hogy az adott rekordra könnyen tudjunk hivatkozni. De mi van akkor, ha a GridView adott sorára is hivatkozni szeretnénk?

Sajnos az eseménykezelő nem tartalmaz ilyen paramétert és ha teljesen egyedi eseményünk van, akkor ezt a GridViewból sem tudjuk kinyerni. Választhatjuk azt a megoldást, hogy a hagyományos Buttonból származtatunk egy saját osztályt, amit kibővítünk egy egyszerű RowIndex tulajdonsággal:

  public int RowIndex
  {
    get
    {
      object obj = this.ViewState[ "RowIndex" ];
      return obj != null ? (int) obj : -1;
    }
    set
    {
      this.ViewState[ "RowIndex" ] = value;
    }
  }

A következő lépés, hogy a GridViewban saját template oszlopot használunk és ott adatkötéssel beállítjuk ezt a tulajdonságot:

  <asp:TemplateField>
    <ItemTemplate>
      <Demo:MyButton runat="server" 
        Text="Csináld!" 
        CommandArgument='<%# Eval("ID") %>'
        RowIndex='<%# Container.DataItemIndex %>' />
    </ItemTemplate>
  </asp:TemplateField>

A gridhez tartozó RowCommand eseménykezelőben így már könnyen megkaphatjuk a sor indexét:

  private void OnRowCommand( object sender, GridViewCommandEventArgs e )
  {
    int rowIndex = ( e.CommandSource as MyButton ).RowIndex;
    // GridView.Rows[ rowIndex ] ...     
  }

Innen kezdve a GridView.Rows gyűjteményt megindexelve könnyen el tudjuk érni a kívánt sort és például megváltoztathatjuk a háttérszínét, hogy visszajelzést adjunk a felhasználónak.

Technorati-címkék:

Advertisements

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s