2009-07-23 22 views
2

我缺少的東西在這裏...ASP.net的ListView訪問控制在ItemUpdating事件

我需要訪問該離開編輯模式下的項目的控件的值,從而發射ItemUpdating。

我發現如何獲得關鍵值,所以我知道我必須更新數據庫中的哪條記錄。問題是我似乎無法訪問編輯行上控件的值。

EditTemplate包含一些複選框,下拉框和文本框。我需要訪問這些值,以便我可以更新記錄。

查看eventargs時,什麼也沒有顯示。

我想我忽略了一些至關重要的事情,任何幫助都會很方便。

+0

你可以發佈你的ItemUpdating事件處理程序嗎? – 2009-07-23 12:41:08

+0

你使用什麼數據源?你有一個ObjectDataSource,你試圖寫一個更新方法? – 2009-07-23 12:43:26

回答

0

我有兩種方法可以這麼做。

第一種方法是使用支持更新命令的數據源並使用雙向綁定來更新值。以下剪切使用雙向綁定來填充名稱和學生字段,它也會爲您更新它們。

<EditItemTemplate> 
      <tr style="background-color: #FFCC66;color: #000080;"> 
       <td> 
        <asp:Button ID="UpdateButton" runat="server" CommandName="Update" 
         Text="Update" /> 
        <asp:Button ID="CancelButton" runat="server" CommandName="Cancel" 
         Text="Cancel" /> 

       </td> 
       <td> 
        <asp:TextBox ID="nameTextBox" runat="server" Text='<%# Bind("name") %>' /> 
       </td> 
       <td> 
        <asp:TextBox ID="studentTextBox" runat="server" Text='<%# Bind("student") %>' /> 
       </td> 
      </tr> 
     </EditItemTemplate> 

如果您沒有使用支持此功能的數據源,您可以另外做一件事。 注意更新按鈕有一個叫做「更新」的命令。您可以使用它通過處理列表視圖ItemCommand事件來獲取所需的控制值。

protected void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e) 
    { 
     if (e.CommandName == "Update") 
     { 
      TextBox box = (TextBox)e.Item.FindControl("nameTextBox"); 

      string name = box.Text; 
     } 
    } 

只需調用find控件並將其傳遞給控件的ID,就可以在editied項中找到任何控件,並且不要忘記該控件。

希望這有助於

2

您還可以使用 「ListView.EditItem.FindControl(」 X 「)」 訪問控制直接。

Protected Sub ListView_ItemUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewUpdateEventArgs) Handles ListView.ItemUpdating 

     Dim DropDownListddl As DropDownList = ListView.EditItem.FindControl("DropDownListddl") 

     Lblwarning.Text = DropDownListddl.SelectedValue 
End Sub