2015-10-13 55 views
-1

当在第一页时,隐藏值可以被获取。所以,没有问题,但是在页面索引改变之后,隐藏的字段值不能被用户获得。它显示错误,是关于 “System.ArgumentOutOfRangeException” 试图让hiddenvalue如何在gridview中使用分页获得隐藏值

(string sValue = ((HiddenField)GridView1.Rows[rowIndex].FindControl("HiddenField1")).Value; 

ASP侧时:

 <Columns> 
      <asp:BoundField DataField="sayfa_adeti" HeaderText="SAYFA ADETİ" ItemStyle-HorizontalAlign="Center" ItemStyle-Width="60px"></asp:BoundField> 
       </asp:BoundField> 

    <asp:HiddenField ID="HiddenField1" runat="server"Value='<%#Eval("ID")%>'</asp:HiddenField> 

    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    getOncekiFotokopiTalepler();//fillGrid 
    GridView1.PageIndex = e.NewPageIndex; 
    GridView1.DataBind(); 
} 

C#侧

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    //int rowIndex = Convert.ToInt32(e.CommandArgument); 
    int rowIndex = Convert.ToInt32(e.CommandArgument.ToString().Trim()); 


    if (e.CommandName == "Goruntule") 
    { 
     string sValue = ((HiddenField)GridView1.Rows[rowIndex].FindControl("HiddenField1")).Value; 
     GridViewRow gvRow = GridView1.Rows[rowIndex]; 

     Session["SELECTED_FOTOKOPI_TALEP_ID"] = sValue; 
     Response.Redirect("~/fotokopiTalebimiGor.aspx"); 
    } 

} 
+0

所以,如果你选择第2页第3行,什么是价值的rowIndex?我的猜测是,你正在获取数据源行索引,并试图将其应用于只有1页数据(即10个项目)的gridview行索引,并且您正在索引项目13 - 例如。 –

+0

代码失败时,“rowIndex”的值是什么? 还有一些代码会很有用,因为我们看不到如何触发RowCommand。例如,如果是通过链接按钮,则可以使用LinkBut​​ton的CommandArgument属性,并将THAT设置为“ID”而不是使用HiddenField。 – Culme

+0

例如在第3页中,我的rowIndex值是13,当我点击链接按钮时,rowcommand函数也可以工作。 –

回答

1

尝试使用这样的:

int rowIndex = Convert.ToInt32(e.CommandArgument) % GridView1.PageSize; 
+0

它的工作原理,但有更好的解决方案:)谢谢 –

1

你可以试试与CommandSource。

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    var control = e.CommandSource as Control; 
    var gridViewRow = control.NamingContainer as GridViewRow; 
    int rowIndex = gridViewRow.RowIndex; 

    .... 
} 
相关问题