2014-11-11 3 views
0

Я надеялся заменить EditItemTemplate из ASP.NET ListView на пользовательский элемент управления, но я не могу понять, как связать его с элементом данных в ListView для достижения двусторонней привязки данных. Элемент данных не является простым свойством. Это объект. Это только кажется, чтобы дать ОДНУ СТОРОНУ типа Eval привязка данных:Usercontrol in EditItemTemplate шаблона управления. Как добиться двусторонней привязки данных?

<EditItemTemplate> 
    <uc:MyUserControl id="thecontrol" runat="server" TheObject='<%# Container.DataItem %>'/> 
</EditItemTemplate> 

Это дает ошибку:

<EditItemTemplate> 
    <uc:MyUserControl id="thecontrol" runat="server" TheObject='<%# Bind("Container.DataItem") %>'/> 
</EditItemTemplate> 

Как делает это:

<EditItemTemplate> 
    <uc:MyUserControl id="thecontrol" runat="server" TheObject='<%# Bind("this") %>'/> 
</EditItemTemplate> 

Есть некоторые привязки синтаксиса выражение дать двухстороннюю привязку данных к текущему элементу в EditItemTemplate?

Редактировать. Это пользовательское управление:

public partial class EditItemUserControl : System.Web.UI.UserControl 
    { 
     public TestObject TheObject 
     { 
      get 
      { 
       return new TestObject() { ID = Int32.Parse(hfID.Value), Name = txtName.Text }; 
      } 
      set 
      { 
       hfID.Value = value.ID.ToString(); 
       txtName.Text = value.Name; 
      } 
     } 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 
    } 

ответ

0

Только для справки. Я делал это неправильно. Пользовательский элемент управления живет в контексте страницы, где он отображается, поэтому нет необходимости устанавливать на нем DataSource. В .ascx файле вы можете просто использовать:

Text = '<%# Bind("MyProperty") %>' 

или

Text = '<%# Eval("MyProperty") %>' 

где MyProperty некоторое свойство DataSource родительского элемента управления.

Смежные вопросы