【问题标题】:How to get selected row value from gridview如何从gridview获取选定的行值
【发布时间】:2017-04-22 18:17:53
【问题描述】:

单击按钮时,我试图从网格视图中获取选定的行值并使用该值执行某些操作,但出现此错误:

Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

并且代码在这一行失败:

string category = gvDetail.Rows[rowIndex].Cells[0].Text;

这是我的代码:

 <asp:GridView ID="gvDetail" runat="server" CssClass="table table-hover table-bordered table-responsive" ForeColor="#333333" GridLines="None"
                CellPadding="4" PageSize="200" OnRowCommand="GridViews_RowCommand"
                AutoGenerateColumns="false" AllowSorting="true" AllowPaging="true" EnableViewState="False">
                <AlternatingRowStyle BackColor="#F3F3F3" />
                <Columns>

                  <asp:BoundField DataField="Category" HeaderText="Category" />
                  <asp:BoundField DataField="name" HeaderText="Name" />               
                  <asp:BoundField DataField="volume_paid" DataFormatString="{0:C0}" HeaderText="Spend" />

                  <asp:ButtonField HeaderText="Spend Metrics" ButtonType="Image" ImageUrl="~/img/mail.png" ControlStyle-Width="30px" ControlStyle-Height="30px" CommandName="Select"  />
                  <asp:ButtonField HeaderText="Request Call/Meeting" ButtonType="Image" ImageUrl="~/img/mail.png" ControlStyle-Width="30px" ControlStyle-Height="30px" CommandName="Select1"  />

                </Columns>
                <HeaderStyle CssClass="GridviewScrollHeader" BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
                <RowStyle CssClass="GridviewScrollItem" ForeColor="#000066" />
              </asp:GridView>

后面的代码:

 protected void GridViews_RowCommand(object sender, GridViewCommandEventArgs e)
    {
       SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["myConn"].ToString());

      SqlDataAdapter da = new SqlDataAdapter(@"select min(month_key) as minKey, max(month_key) as maxKey from myTable", con);
      DataTable dtSETS = new DataTable();

      da.Fill(dtSETS);

      if (dtSETS.Rows.Count > 0)
      {
        DataRow dtSETS_row = dtSETS.Rows[0];

        int minKey = dtSETS_row.Field<int>("minKey");
        int maxKey = dtSETS_row.Field<int>("maxKey");


        if (e.CommandName == "Select")
        {
          ///Determine the RowIndex of the Row whose Button was clicked.
          int rowIndex = Convert.ToInt32(e.CommandArgument);
          string category = gvDetail.Rows[rowIndex].Cells[0].Text;
          string name = gvDetail.Rows[rowIndex].Cells[1].Text;         
          string volumepaid = gvDetail.Rows[rowIndex].Cells[2].Text;

         // do something...

        }

        if (e.CommandName == "Select1")
        {
          // do something...

        }


      }
    }

【问题讨论】:

  • 此错误不能出现在这一行:(int rowIndex = Convert.ToInt32(e.CommandArgument);) 您需要检查它必须在页面加载时出现的网格数据源
  • 它不是在页面加载时,而是当我点击按钮时代码停在该行
  • 因为我测试了您的代码,并且在页面加载中绑定数据网格视图时它工作正常,但是当我更改绑定位置时,此错误在下一行出现(字符串类别 = gvDetail.Rows[rowIndex].单元格[0].Text;).
  • 是的,你是对的,我很抱歉造成混乱,它实际上没有达到你提到的那条线
  • 我该如何解决这个问题?我似乎无法找出解决方案..

标签: c# asp.net gridview


【解决方案1】:

问题是我将 enableviewstate 设置为 false,所以我必须将其设置为 true。 谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 2023-04-07
    • 2012-10-02
    • 1970-01-01
    相关资源
    最近更新 更多