2011-12-12 62 views
1

我有一個DetailsView綁定到一個EntityDataSource,並試圖從我的TextBox es在EditItemTemplates中獲取值。如何在EditItemTemplate中獲取控件?

這裏是我的代碼:

<asp:DetailsView ID="DetailsView1" DataKeyNames="Name" runat="server" AutoGenerateRows="False" 
OnDataBound="DetailsView_DataBound" DataSourceID="eds2" BorderWidth="0" 
OnModeChanging="OnModeChanging" AutoGenerateEditButton="true" 
OnItemUpdated="DetailsView_OnItemUpdated" OnItemUpdating="DetailsView_OnItemUpdating" 
EmptyDataText="N/A" OnDataBinding="DetailsView_OnDataBinding" CellPadding="0" 
CellSpacing="7" GridLines="None" CssClass="Center"> 
<Fields> 
<asp:TemplateField HeaderText="Name"> 
    <EditItemTemplate> 
    <asp:TextBox ID="txtName" runat="server" Text='<%# Bind("Name") %>'></asp:TextBox> 
    </EditItemTemplate> 
    <ItemTemplate> 
    <asp:Label ID="lblName" runat="server" Text='<%# Bind("Name") %>'></asp:Label> 
    </ItemTemplate> 
</asp:TemplateField> 
<Fields> 
</asp:DetailsView> 

而後面的代碼:

protected void OnModeChanging(object sender, DetailsViewModeEventArgs e) 
{ 
    foreach (DetailsViewRow row in DetailsView1.Rows) 
    { 
     if (row.RowType != DataControlRowType.DataRow) continue; 
     foreach (DataControlFieldCell cell in row.Cells) 
     { 
      var textbox = cell.FindControl("txtName"); 
      var textbox2 = row.FindControl("txtName"); 
     } 
    } 
} 

textboxtextbox2總是空。我究竟做錯了什麼?我怎樣才能得到文本框或裏面的值?

回答

6

您在編輯模板中聲明瞭這些文本框。這些只會在您的模式設置爲編輯時顯示。我猜這在ModeChanging事件被觸發時還沒有發生。

將您的代碼放入ModeChanged事件中,並檢查是否正在編輯。

void DetailsView1_ModeChanged(object sender, EventArgs e) 
{ 
    if (DetailsView1.CurrentMode != DetailsViewMode.Edit) 
     return; 

    foreach (DetailsViewRow row in DetailsView1.Rows) 
    { 
     var textbox = row.FindControl("txtName"); 
    } 
} 
+0

現在測試這個,謝謝! –

+0

工作完美!編輯模式沒有正確設置! –

+0

@TyRozak - 很高興聽到它:) –

相關問題