如何将属性添加到可绑定的表适配器?

时间:2009-02-03 21:46:51

标签: c# .net asp.net tableadapter

我有一个数据库表TravelRequest,其中包含字段SignOffNameSignOffDate。我有一个基于此表的表适配器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'的字段或属性。”

我有什么想法可以做到这一点?是否需要添加到属性中的属性?

2 个答案:

答案 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>  
            ...