我只是在玩一些linq和asp.net - 绝对是初学者,所以我甚至不确定如何问我的问题。
无论如何,我有一个带有asp成员信息的MSSQL数据库。由于各种原因(主要是将配置文件信息存储在清除列中而不是全部存储在一起)我正在使用自定义配置文件提供程序,因此我的配置文件信息分布在我的数据库中的几个表中。
我有正常的aspnet_membership和aspnet_profle,但是我还有一个tblUserProfile表,其中我存储了一堆用户配置文件信息,如名字,电话号码等.tblUserProfile中还有一个companyID,指的是单独的表格,其中包含公司列表。
所有表都有GUID UserId作为其键。 我创建了一个数据模型图,其中包含了我正在使用的所有表,它显示了正确连接的键等。
所以现在我有一个gridview,它使用连接到aspnet_membership表的LinqDataSource。到目前为止这个位运行良好,我能够显示aspnet_membership表中的所有信息。我还想出了如何向用户展示这样的公司:
<asp:TemplateField HeaderText="Company" SortExpression="tblUserProfile.Company.CompanyName">
<ItemTemplate>
<%#Eval("tblUserProfile.Company.CompanyName") %>
</ItemTemplate>
我无法弄清楚如何更改此保存到数据库。如果我在aspnet_membership表中更改直接字段,它们会正确更新。
我创建了一个显示所有可用公司的下拉列表,您可以选择直接在网格中更改的公司,但是当我尝试更新时,它会恢复为原始值。
<asp:TemplateField HeaderText="Company" SortExpression="tblUserProfile.Company.CompanyName">
<ItemTemplate>
<%#Eval("tblUserProfile.Company.CompanyName") %>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="CompanyDropDownList"
DataSourceID="CompanyDataSource"
DataValueField="Id"
DataTextField="CompanyName"
SelectedValue='<%#Bind("tblUserProfile.CompanyID") %>'
runat="server">
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
我不确定是不是因为我的数据源连接到一个表(aspnet_membership),但我想要更改的值是tblUserProfile。我似乎可以从通过外键连接的其他表中检索/显示值,但是我是否还可以更新这些表中的值?
很抱歉这是一个冗长的问题,但我对此很陌生,所以不确定问题究竟在哪里,否则我会更具体。
感谢您的任何指示
答案 0 :(得分:1)
听起来您正在尝试使用LinqDataSource提供的自动更新,但正如您所指出的那样,这对于已连接的数据无效。这是自动更新的限制。但是,您可以订阅其中一个OnUpdating事件并编写一些代码来处理其他更新。应该如何写出来取决于你的关键值的名称等等,但是在这个网站和其他地方应该有关于它的一些信息。
答案 1 :(得分:0)
您可以创建自定义数据绑定控件来编辑子对象
public class CompositeBoundField : BoundField
{
protected override object GetValue(Control controlContainer)
{
object item = DataBinder.GetDataItem(controlContainer);
return DataBinder.Eval(item, this.DataField);
}
}
然后在这样的页面中使用它:
<cc:CompositeBoundField DataField="aspnet_Membership.Email" HeaderText="Email"/>
然后将其添加到web.config:
<pages>
<controls>
<add assembly="App_Code" namespace="CustomControls" tagPrefix="cc"/>
</controls>
让我知道这是否有助于我给我一个检查。可以为复选框或其他类型创建其他绑定字段。这可能是此方法的原始作者/来源:
http://iridescence.no/post/FixingBoundFieldSupportforCompositeObjects.aspx