使用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
时不抛出任何错误。
DataKeyNames
。RetrieveDataTypeFromFirstItem="true"
添加到MasterTableView
,试图强制他从子项中获取该类型。答案 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类,以便轻松管理数据。
祝你好运