我有一个数据库表TravelRequest
,其中包含字段SignOffName
和SignOffDate
。我有一个基于此表的表适配器TravelRequestTable
。我有一个DetailsView控件,它通过ObjectDataSource使用它。应该是所有相当标准的东西。
我想要做的是将一个名为SignOffNameDate
的属性添加到表适配器,该属性组合了两个字段和能够在DetailsView控件中绑定它。我想以编程方式执行此操作,而不是在SQL中添加另一列,因为处理空值非常棘手,并且取决于其他一些业务规则。
这就是我的尝试:
public partial class TravelRequestDS
{
public partial class TravelRequestRow
{
public string SignOffNameDate
{
get { return CombineNameDate(SignOffName, SignOffDate); }
}
}
}
当我以编程方式访问它时,此属性正常工作,但是当我尝试在我的aspx页面中绑定它时:
<asp:DetailsView ID="DetailsView_TravelRequest" runat="server" AutoGenerateRows="False"
DataKeyNames="TravelRequestID" DataSourceID="ObjectDataSource_TravelRequest">
<Fields>
<asp:BoundField DataField="SignOffNameDate"
HeaderText="Sign Off" />
...
我收到一个System.Web.HttpException异常,“在所选数据源上找不到名为'SignOffNameDate'的字段或属性。”
我有什么想法可以做到这一点?是否需要添加到属性中的属性?
答案 0 :(得分:0)
如果您不想更改表结构,请更改将数据加载到适配器的默认方法(通常称为Fill),很可能您正在执行Select * From [TravelRequest]或选择单个字段,因此您可以做的是将TableAdapter查询选择语句更改为
Select [YourCol1],[YourCol2], SignOffNameDate as Null From [TravelRequest]
修改默认查询,并选择SignOffNameDate为null将为您提供设置此值的权限
答案 1 :(得分:0)
如果您的目标是在单个不可编辑的字段中显示合并结果,您可以这样做:
<asp:DetailsView ID="DetailsView_TravelRequest" runat="server" AutoGenerateRows="False"
DataKeyNames="TravelRequestID" DataSourceID="ObjectDataSource_TravelRequest">
<Fields>
<asp:TemplateField HeaderText="Sign Off" SortExpression="SignOffDate">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("SignOffName") %>'></asp:Label>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("SignOffDate") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
...