2012-12-21 119 views
2

我使用下面的代码,以获得行索引获取GridView的行索引

protected void gvESAPending_RowCommand(object sender, GridViewCommandEventArgs e) 

    { 
     try 
     { 
      lblMsg.Text = ""; 
      int index = Convert.ToInt32(e.CommandArgument); 
      GridViewRow row = gvESAPending.Rows[index]; // Here incorrect format error is coming 
     } 
    } 

不过该指标值来为0。这里有什么问题?

.aspx的代码

“> “>

+1

看看[GridView.RowCommand事件](http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowcommand.aspx) –

+0

我试过同样的方法仍然没有帮助 –

+0

指数超出范围。必须是非负数且小于集合的大小。 参数名称:index –

回答

1

您可以添加OnRowCreteEvent

ASPX:

<asp:gridview id="gvESAPending" onrowcreated="gvESAPending_RowCreated" ... 

CS:

protected void gvESAPending_RowCreated(Object sender, GridViewRowEventArgs e) 
    { 
    if(e.Row.RowType == DataControlRowType.DataRow) 
    { 
     LinkButton addButton = (LinkButton)e.Row.Cells[0].Controls[0]; 

     addButton.CommandArgument = e.Row.RowIndex.ToString(); 
    } 

    } 
+0

请告诉我如何 –

+0

我得到这个错误 {System.InvalidCastException:无法强制'System.Web.UI.WebControls.GridView'键入'System.Web.UI.WebControls.Button'。 –

+0

什么是错误?您可以给我们的aspx代码或按照@huMpty duMpty – GeorgesD

0
GridViewRow row = gvESAPending.Rows[index]; 

通过这样做,您实际上访问索引处的行。所以如果index = 2,你实际返回gridviewrow中的第三行。

+0

int index = Convert.ToInt32(e.CommandArgument); 这是返回0,所以它应该工作。但它给出的错误 –

+0

索引超出范围。必须是非负数且小于集合的大小。 参数名:指数 –

+0

试试这个 'Int32.Parse(e.CommandArgument.ToString())' 东西可能会扭曲与转换功能,这应该熬下来,给你更多的东西有用的工作。如果你真的想要得到花式设置 'string var = e.CommandArgument.ToString()' 在它后面放置一个断点并在本地窗口中检查它以确保获得一个值 – Pseudonym