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

是否在ASP.NET用户控件内的控件上设置数据源?

  •  5
  • MattSlay  · 技术社区  · 15 年前

    我已经创建了我的第一个ASP.NET用户控件,我将在整个应用程序的几个地方使用它。它包含一个用于在数据表中显示记录字段的窗体视图。

    这一切似乎都很好,除了,我不知道如何在用户控件内的FormView上设置数据源。我想在代码隐藏的方法中设置数据源。

    我从IntelliSense中看到,UserControl没有DataSource属性,但它有一个DataBind方法。我可以想象,可能需要在一个用户控件内的多个控件上设置不同的数据源,因此必须有某种方法可以钻取到一个用户控件中,但我无法弄清楚。

    以下是ASPX代码:

    <%@ Register src="Controls/JobDetail.ascx" tagname="JobDetail" tagprefix="uc1" %>
    
     ...
     <uc1:JobDetail ID="UserControlJobDetail" runat="server" />
     ...
    

    下面是尝试设置数据源的方法:

    public void BindJobRecord(string SelectedJobNo)
    {
        UserControlJobDetail.DataSource = LMDataClass.GetJob(SelectedJobNo);
        UserControlJobDetail.DataBind();
    }
    

    下面是用户控件:

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="JobDetail.ascx.cs" Inherits="DwgDatabase.JobDetail" %>
    
    <asp:FormView ID="fvJobDetail" runat="server" DataKeyNames="job_num">
      <ItemTemplate>
       <div style="float: left; border-width: 1px;" class="LabelStyle TextBoxStyle" >
        <table>
          <tr>
           <td><asp:label runat="server" ID="lblJobNo" Text='Job No' /></td>
           <td><asp:TextBox runat="server" ID="txtJobNo" Text='<%# Eval("job_num") %>' /></td>
          </tr>
          <tr>
           <td><asp:label runat="server" ID="Label2" Text='Customer' /></td>
           <td><asp:TextBox runat="server" ID="txtCustNo" Text='<%# Eval("cust_num") %>' /></td>
          </tr>
          <tr>
            <td><asp:label runat="server" ID="Label3" Text='Quote No' /></td>
            <td><asp:TextBox runat="server" ID="txtQuoteNo" Text='<%# DataBinder.Eval(Container.DataItem, "quote_no", "{0:00000;;.}") %>' /></td>
           </tr>
           <tr>
            <td><asp:label runat="server" ID="Label4" Text='Po No.' /></td>
            <td><asp:TextBox runat="server" ID="TextBox4" Text='<%# Eval("p_o_num") %>' /></td>
           </tr>
        </table>        
        </div>
    </ItemTemplate>               
    </asp:FormView>
    
    1 回复  |  直到 15 年前
        1
  •  9
  •   Albert    15 年前

    在用户控件上创建属性数据源,如下所示:

    public object DataSource
    {
      get
      {
        return this.fvJobDetail.DataSource;
      }
      set
      {
        this.fvJobDetail.DataSource = value;
      }
    }
    

    对databind()方法执行相同的操作。