GridView wertet RowState Edit oder Select scheinbar nicht aus

Written on July 31, 2006

Ich hatte eben mit folgendem Code ein interessantes Erlebnis:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) {
   if (e.Row.RowType == DataControlRowType.DataRow) {
      if (e.Row.RowState != DataControlRowState.Selected && this.GridView1.SelectedIndex > -1) {
         e.Row.Visible = false;
      }
   }
}

Dies führte dazu, dass die Alternating Items (also die geradzahligen Items 2, 4, 6) niemals sichtbar wurden.

Beim Debuggen zeigte sich dann des Rätsels Lösung: Der RowState wurde als "Alternate | Selected" angezeigt, d.h. als Kombinitaion zweier States.

Wie lässt sich nun feststellen, ob der DataControlRowState.Selected vorhanden ist?

Die Lösung liegt in der Verwendung des bitweisen UND-Operators (&):

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) {
   if (e.Row.RowType == DataControlRowType.DataRow) {
      if ((e.Row.RowState & DataControlRowState.Selected) == 0 && this.GridView1.SelectedIndex > -1) {
         e.Row.Visible = false;
      }
   }
}