0

我有一个数据库表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' 的字段或属性。”

任何想法我怎么能做到这一点?我需要添加到属性中的属性吗?

4

2 回答 2

0

如果您不想更改表结构,请更改将数据加载到适配器中的默认方法(通常称为 Fill),很可能您正在执行 Select * From [TravelRequest] 或选择各个字段,所以您可以要做的是将您的 TableAdapter 查询选择语句更改为类似

Select [YourCol1],[YourCol2], SignOffNameDate as Null From [TravelRequest]

修改默认查询,并将 SignOffNameDate 选择为 null 将允许您设置此值

于 2009-02-03T22:01:00.147 回答
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>  
            ... 
于 2010-03-04T17:47:13.260 回答