user2522779
user2522779

Reputation: 51

Gridview.row.count show zero whenever button is click

i have a gridview ,whenever user will click on row of gridview view , record will be populated in the textbox ,but i am getting error as

index was out of range. must be non-negative and less than the size of the collection

also i check gridview.row.count is showing zero. please help below is my code

<asp:GridView ID="GridView2"  runat="server" AutoGenerateColumns="False"  ShowHeader="false"  AllowPaging="false" AllowSorting="false" ToolTip="Click Here To Edit"
                          Style="table-layout: fixed;"  OnRowDataBound="GridView1_RowDataBound"
                        CssClass="mGrid"  PagerStyle-CssClass="pgr"  DataKeyNames="AcheadID"
                            AlternatingRowStyle-CssClass="alt" Width="100%" Height="100%"  >

    <AlternatingRowStyle CssClass="alt" />
           <Columns>
                <asp:TemplateField ItemStyle-Width="40px">
                  <ItemTemplate>
                     <%#Container.DataItemIndex+1 %>
                  </ItemTemplate>
                </asp:TemplateField>

                <asp:BoundField HeaderText="Account Head ID" DataField="AcheadID" HeaderStyle-HorizontalAlign="Left" Visible="false" />

                <asp:TemplateField HeaderText="Account Head" HeaderStyle-HorizontalAlign="Left" ItemStyle-Width="400px">
                      <ItemTemplate>
                               <asp:Label ID="lblac_head" runat="server" Text='<%# Bind("ac_head") %>'></asp:Label>
                                    <asp:HiddenField ID="hndacheadID" runat="server" Value='<%# Bind("AcheadID") %>' />
                      </ItemTemplate>
                </asp:TemplateField>                       
           </Columns>
</asp:GridView>

<asp:Button ID="btnTest"  runat="server"  OnClick="GridView1_OnClick" style="display:none;"  />

my codebehind as

    protected void Page_Load(object sender, EventArgs e)
    {

        if (!IsPostBack)
        {
            GetAccountHead();

        }
    }

 protected void GridView1_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
    {



        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            HiddenField hndac_headid = (HiddenField)e.Row.FindControl("hndac_headid");
            if (hndac_headid.Value != "0")
            {
                e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='#d3d3d3'");
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=''");
                e.Row.Attributes.Add("style", "cursor:pointer;");
                //e.Row.Attributes.Add("onclick", "location='patron_detail.aspx?id=" + e.Row.Cells[0].Text + "'");
                e.Row.Attributes["OnClick"] = Page.ClientScript.GetPostBackClientHyperlink(btnTest, e.Row.RowIndex.ToString());
            }
        }
    }

    protected void GridView1_OnClick(object sender, EventArgs e)
    {

        Button buttonSender = sender as Button;
        int index;
        GridViewRow row = null;
        if (int.TryParse(Request.Params.Get("__EVENTARGUMENT"), out index))
        {
            row = GridView1.Rows[index];
            Label ac_head = (Label)GridView1.Rows[index].FindControl("lblac_head");


        }

Upvotes: 1

Views: 994

Answers (2)

R.C
R.C

Reputation: 10565

Index out of range issue happens because Request.Params.Get("__EVENTARGUMENT") doesn't works for Button ( and addiionally ImageButton ) controls.

The Button controls and ImageButton controls does not call the __doPostBack function. Because of this, the _EVENTARGUMENT ( and _EVENTTARGET as well ) will always be empty.

However, other controls such as CheckBoxes, DropDownLists, LinkButtons uses javascript function __doPostBack to trigger a postback.

Try using a LinkButton

As a second check( can be ignored ), just make sure Data is binded to GridView properly like check the IsPostback conditions etc...

Upvotes: 1

Paolo Costa
Paolo Costa

Reputation: 1989

Check your GridView, it has an Id GridView2 but you always referencer GridView1.

Upvotes: 0

Related Questions