2011-08-29 14 views
2

我有一個GridView的客戶端列表和他們的細節綁定到一個Sq1DataSource。我想通過RowUpdating事件從代碼中更新它,通過訪問數據逐個單元格並將其發送到我的客戶端BLL中的更新功能。這是代碼:GridView從拋出異常的代碼更新

protected void gvClients_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 

     GridViewRow row = gvClients.Rows[e.RowIndex]; 
     //accesses Client Id 
     cliIdStr = ((TextBox)(row.Cells[1].Controls[0])).Text; 
     int cliId = int.Parse(cliIdStr); 
     cliBll = new ClientBLL(conStrName); 
     //Accesses client object from DB according to Client Id accessed from gridView 
     client = cliBll.GetClient(cliId); 
     if (client != null) 
     { 
      client.ClientName = ((TextBox)(row.Cells[2].Controls[0])).Text; 
      client.Phone = ((TextBox)(row.Cells[3].Controls[0])).Text; 
      client.EMail = ((TextBox)(row.Cells[4].Controls[0])).Text; 
      client.Fax = ((TextBox)(row.Cells[5].Controls[0])).Text; 
      client.Address = ((TextBox)(row.Cells[6].Controls[0])).Text; 
      client.City = ((DropDownList)(row.Cells[7].Controls[0])).SelectedValue; 
      client.ZipCode = ((TextBox)(row.Cells[8].Controls[0])).Text; 
      client.IdNum = ((TextBox)(row.Cells[9].Controls[0])).Text; 
      client.BusField = ((TextBox)(row.Cells[10].Controls[0])).Text; 
      cliBll = new ClientBLL(conStrName); 
      cliBll.UpdateClient(cliDtlShrt); 
     } 
    } 

當我運行該程序,並按下GridView控件一切的編輯按鈕是好的,但是當我按下Uodate按鈕下面的異常被拋出:

[ArgumentOutOfRangeException:指定的參數超出了有效值的範圍 。參數名稱:索引]
System.Web.UI.ControlCollection.get_Item(的Int32索引)8673806

指向這一行中的代碼:

cliIdStr = ((TextBox)(row.Cells[1].Controls[0])).Text; 

如果我正確的理解消息問題出在Controls [0]中,但爲什麼?如何從gridView單元訪問數據以發送到更新?

+2

您確定單元格中有實際的TextBox控件嗎?你自己把它放在那裏嗎? –

回答

1

您的代碼失敗,因爲發生更新時,提供編輯UI的行不再可用 - e.RowIndex的行是正常的網格視圖行,其單元格將按照列類型進行控制。因此,大多數單元格(例如BoundField列的單元格)在其內部沒有任何控制,因爲單元格直接包含值 - 因此在Controls[0]處出現錯誤。

您需要使用GridViewUpdateEventArgs.NewValues屬性來獲取行(非鍵列)的新值。同樣,鍵列的值將出現在e.Keys中。

編輯:我也建議你考慮用ObjectDataSource而不是SqlDataSource來讓你的生活更簡單 - 參見this article讓你開始。

+0

謝謝。我很驚訝你寫的行提供編輯用戶界面不再可用,因爲我從msdn GridView.RowEditing Event文章中複製了代碼。我會嘗試你的答案,我也會查閱你建議的文章。 –

+0

我沒有成功從e.Keys獲得價值,這是怎麼回事?謝謝。 –

+0

它的工作!非常感謝! –