Получить данные из текстового поля внутри повторителя, который находится внутри представления формы - PullRequest
0 голосов
/ 23 июня 2011

Я хочу получить значение текстовых полей внутри повторителя, который находится внутри представления формы и привязан к источнику данных объекта.

<asp:FormView ID="FormView1" runat="server" AllowPaging="True" 
  DataKeyNames="Id" EnableViewState="False"
  OnPageIndexChanging="FormView1_PageIndexChanging" 
  onitemupdated="FormView1_ItemUpdated" 
  OnItemUpdating="FormView1_ItemUpdating" ondatabound="FormView1_DataBound"> 
    <ItemTemplate>
        <asp:TextBox ID="txtProdName"  runat="server" Text='<%#Eval("ManufacturerProductName") %>'></asp:TextBox>
        <asp:Repeater ID="Repeater1" runat="server"   DataSource='<%#DataBinder.Eval(Container.DataItem,"Distributors") %>'>
            <ItemTemplate>
                <asp:TextBox ID="TextBox1" runat="server" ontextchanged="onTextChanged" Text='<%# DataBinder.Eval(Container.DataItem, "FobCost")%>'></asp:TextBox>
                <asp:Repeater ID="Repeater2" runat="server" DataSource='<%#  DataBinder.Eval(Container.DataItem,"PricingsheetWarehouses") %>'>
                    <ItemTemplate>
                        <asp:TextBox ID="TextBox2" runat="server" ontextchanged="onTextChanged" Text='<%# DataBinder.Eval(Container.DataItem, "DeliveredCost")%>'></asp:TextBox>
                    </ItemTemplate>
                </asp:Repeater>
            </ItemTemplate>
        </asp:Repeater>
    </ItemTemplate>
</asp:FormView>

я получаю txtProdName как это

TextBox t=FormView1.FindControl("txtProdname")as textBox;

но я не могу использовать его, чтобы получить текстовые поля внутри ретранслятора, что дает мне ноль любая помощь ??

Ответы [ 3 ]

0 голосов
/ 23 июня 2011

попробуй

  Repeater repeater1=FormView1.FindControl("Repeater1")as Repeater;

protected void RptrSupplier_ItemDataBound(Objectsender,System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
    // Only process items (not footers or headers) 
    if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
          TextBox t = e.Item.FindControl("TextBox1") as TextBox;
          t.ID = ((MyType)e.Item.DataItem).ID.ToString(); //you should cast to the type of your object
          t.TextChanged += txt1_TextChanged;
     }
}

protected void txt1_TextChanged(object sender, EventArgs e)
{
    TextBox t = sender as TextBox;
    var tempobject = MyCollection.Where(C => C.ID == t.ID).Single();  
    tempobject.Prop = t.Text;
}
0 голосов
/ 23 июня 2011

Используйте рекурсивный поиск, чтобы найти элемент управления независимо от его глубины:

    public static Control FindControlRecursive(Control control, string id)
    {
        if (control == null) return null;
        Control ctrl = control.FindControl(id);
        if (ctrl == null)
        {
            foreach (Control child in control.Controls)
            {
                ctrl = FindControlRecursive(child, id);
                if (ctrl != null) break;
            }
        }
        return ctrl;
    }
0 голосов
/ 23 июня 2011

Вам нужно найти текстовое поле внутри самого повторителя, как вы это делаете с FormView1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...