Как я могу получить элемент управления внутри моего EditItemTemplate? - PullRequest
1 голос
/ 12 декабря 2011

У меня DetailsView привязан к EntityDataSource, и я пытаюсь получить значения из моих TextBox es в EditItemTemplates.

Вот мой код:

 <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");
        }
    }
}

textbox и textbox2 всегда равны нулю.Что я делаю неправильно?Как я могу получить текстовое поле или значение внутри него?

1 Ответ

6 голосов
/ 12 декабря 2011

Эти текстовые поля объявлены в вашем шаблоне редактирования. Они будут отображаться только когда ваш режим настроен на редактирование. Я предполагаю, что это еще не произошло, когда происходит событие 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");
    }
}
...