在EditFormTemplate中自动更新子属性

时间:2018-01-17 08:43:22

标签: c# telerik telerik-ajax

上下文

使用RadGrid,您可以拥有build-in automatic CRUD operation。但这些操作似乎只能在源/父表上进行。

<asp:LinqDataSource ID="myLinqDataSource" runat="server"
                    ContextTypeName="ExempleDataContext" TableName="Order"/>
<telerik:RadGrid ID="myRadGrid" runat="server" DataSourceID="myLinqDataSource">
    <MasterTableView .../>
</telerik:RadGrid>

虽然能够显示父母或子女的财产:

<telerik:GridBoundColumn DataField="CustomerId" HeaderText="CustomerId"
                         SortExpression="CustomerId" UniqueName="CustomerId"/>                             
<telerik:GridBoundColumn DataField="Product.Name" HeaderText="Product.Name"
                         SortExpression="Product.Name" UniqueName="Product.Name" />

并在EditForm中绑定它们:

Customer Id :
    <asp:TextBox ID="tb_CustomerId" runat="server"
        Text='<%#Bind("CustomerId")%>' AutoPostBack="false" />

Product Name:
    <asp:TextBox ID="tb_Product_Name" runat="server"
        Text='<%#Bind("Product.Name")%>' AutoPostBack="false" />

但只有#34;父亲领域&#34; (这里CustomerId)获取更新 忽略Product.Name时不抛出任何错误。

Exemple Dbml Schema:

DbmlExemple

我尝试了什么:

  • 将子主键添加到网格DataKeyNames
  • RetrieveDataTypeFromFirstItem="true"添加到MasterTableView,试图强制他从子项中获取该类型。
  • 古典telerik vodoo,以手动插入和ItemCommand事件结束。

的Nb:

  • 就地和自动更新有效。只有模板化表格无法绑定。

1 个答案:

答案 0 :(得分:0)

我不熟悉AJAX(使用Telerik的C#版本),但是AFAIK,你不能使用“Product.Name”这样的语法。绑定仅指类内的字段,在您的情况下它类似于

class Product()
{
   public int Id
   public string Name
}  

class Customer()
{
   public int Id
   public string Name
}   

class Order()
{
   public int Id
   public int CustomerId
   public int ProductId
} 

这意味着,您只能直接引用类属性。如果使用数据类型(即Customer)填充容器,则只能绑定Id和Name属性。

要实现您想要的目标,您可以创建自定义DTO类,例如

  class FullDataObject()
  {
          public int ProductId
          public string ProductName
          public int CustomerId
          public string CustomerName
          public int OrderId
  }

然后创建这些对象的集合并使用来自DB的数据填充它,并操纵容器中的数据。

如果您想坚持使用Build in CRUD选项,您需要确定要在容器内编辑的对象类型 - 订单,客户或产品。

由于您的表之间的关系非常简单,这些关系是一对一或一,我会创建DTO类,以便轻松管理数据。

祝你好运