代码之家  ›  专栏  ›  技术社区  ›  TallGuy

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

  •  0
  • TallGuy  · 技术社区  · 16 年前

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

    我能怎么做吗?是否有需要添加到属性的属性?

    2 回复  |  直到 16 年前
        1
  •  0
  •   tiktock    15 年前

    如果您的目标是在单个不可编辑字段中显示组合结果,则可以这样做:

    <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>  
                ... 
    
        2
  •  0
  •   Ta01    16 年前

    如果不想更改表结构,请更改将数据加载到适配器中的默认方法(通常称为fill),最有可能的做法是从[TravelRequest]中选择*或选择单个字段,因此可以将TableAdapter查询选择语句更改为

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

    修改默认查询,并将signoffnamedate选择为空将允许您设置此值。