2012-12-21 160 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