title: Click GridView Find Selected Row
body: <p>I'm trying to take a GridView and get back the data from the row that was clicked.  I've tried the code below and when I click the row I get back the selected index but when I look at the actual rows in the GridView they show empty.  Not sure what I am missing.</p>
  
  <p>.ASP make my grid.</p>
  
  <pre><code>&lt;asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="True" 
          CssClass="datatables" Width="100%" 
          DataSourceID="SqlDataSource1" 
          GridLines="None" ShowFooter="True" AllowSorting="True"  
          onrowcreated="GridView1_RowCreated" 
          onrowdatabound="GridView1_RowDataBound" ShowHeaderWhenEmpty="True" 
          onrowcommand="GridView1_RowCommand" 
          onselectedindexchanged="GridView1_SelectedIndexChanged"&gt;
          &lt;HeaderStyle CssClass="hdrow" /&gt;
          &lt;RowStyle CssClass="datarow" /&gt;
          &lt;PagerStyle CssClass="cssPager" /&gt;
  &lt;/asp:GridView&gt;
  </code></pre>
  
  <p>On each row data bound I make sure that the click should set the selected index.</p>
  
  <pre><code>protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
  {
       if (e.Row.RowType == DataControlRowType.DataRow)
       {
          e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackClientHyperlink(GridView1, "Select$" + e.Row.RowIndex);
       }
   }
  </code></pre>
  
  <p>Then when the selected index changes by clicking this gets fired which I can put a breakpoint on the first line and I see the index of what I clicked on get stored in a.  However when I get to the foreach it skips right past it because it shows GridView1 having a Count of 0 rows.  In theory it should have a couple hundred rows and when the index matches it should grab the data in the 6th cell over and store it in string b.  Why am I getting no rows on the click?</p>
  
  <pre><code> protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
   {
              int a = GridView1.SelectedIndex
  
              foreach (GridViewRow row in GridView1.Rows)
              {
                  if (row.RowIndex == a)
                  {
                      b = row.Cells[6].Text;
                  }
              }
   }
  </code></pre>
  
  <p>Here is my page load.</p>
  
  <pre><code>protected void Page_Load(object sender, EventArgs e)
  {
        c = HttpContext.Current.Session["c"].ToString();
        SqlDataSource1.ConnectionString = //My secret
        string strSelect = "SELECT columnnames from tablenames where c in (@c)
        SqlDataSource1.SelectParameters.Clear();
        SqlDataSource1.SelectCommand = strSelect;
        SqlDataSource1.SelectParameters.Add("c", c);
         try
          {
              GridView1.DataBind();
          }
          catch (Exception e)
          {
  
          }
          GridView1.AutoGenerateColumns = true;
  }
  </code></pre>