2014-05-02 76 views
0

我在這裏回顧了各種各樣的問題,但是我仍然無法得到這個工作。我有一個網格視圖(OrderList),並在這個gridview我有一個按鈕列來簡單地更新一個特定的領域(基本上是一個接受訂單標記)。如何在GridView中獲取單元格的值?

在aspx文件我有以下代碼

<asp:TemplateField> 
    <ItemTemplate> 
     <asp:Button ID="ButtonToAcceptOrder" runat="server" Text="Accept Order" CommandName="AcceptOrder" CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" /> 
    </ItemTemplate> 
</asp:TemplateField> 

在代碼文件的背後,我有以下代碼:

protected void OrderList_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName =="AcceptOrder") 
    { 
      // Retrieve the row index stored in the 
      // CommandArgument property. 
      int index = Convert.ToInt32(e.CommandArgument); 

      // Retrieve the row that contains the button 
      // from the Rows collection. 
      GridViewRow row = OrderList.Rows[index]; 

      Int32 oId = Int32.Parse(row.Cells[1].Text); 

      //Code to Update database by order id 
    } 
} 

錯誤來自oId來告訴輸入是不正確的格式。
在gridview的第一列中,我顯示了我需要的ID。其他欄目正在顯示其他細節。

如果您發現我的代碼中存在任何問題,您可以提供幫助嗎?

(我以前跟着這個教程:http://msdn.microsoft.com/en-us/library/vstudio/bb907626(v=vs.100).aspx

回答

0

如果你有一個唯一的ID爲每行,那麼你應該使用的GridView的DataKeyNames財產。

<GridView id="OrderList" DataKeyNames="oId"... /> 

然後在你的RowCommand代碼,訪問它就像這樣:

Int32 oId = OrderList.DataKeys[row.DataItemIndex].Value; 

這是不是試圖從細胞獲得價值乾淨多了。

+0

哦從來沒有使用DataKeys,感謝您通知我他們:) 只是一個小問題,我得到'錯誤',因爲datakeys不是一種方法。 – user2151973

+0

更新了我的答案。 '(row.DataItemIndex)'應該是'[row.DataItemIndex]'。 –

+0

感謝您的幫助。工作正常。通過一些快速調試,我意識到我的代碼正在獲得第二列的價值(我愚蠢地忘記了這一點)。正確的格式應該是:'row.Cells [0] .Text' – user2151973

相關問題