Установить DataSource для элементов управления в asp.net UserControl? - PullRequest
5 голосов
/ 15 апреля 2009

Я создал свой первый пользовательский элемент управления asp.net, который я буду использовать в нескольких местах моего приложения. Он содержит FormView для отображения полей записи в DataTable.

Все выглядит нормально, за исключением того, что я не могу понять, как установить DataSource в FormView, который находится в UserControl. Я хочу установить DataSource в методе с выделенным кодом.

Я вижу из intellisense, что UserControl не имеет свойства DataSource, но у него есть метод DataBind. Я могу себе представить, что может потребоваться установить разные источники данных для нескольких элементов управления в UserControl, поэтому должен быть какой-то метод для детализации в UserControl, но я не могу понять это.

Вот код 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 Ответ

9 голосов
/ 15 апреля 2009

Создайте свойство DataSource в пользовательском элементе управления, как показано ниже:

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

Сделайте то же самое для метода DataBind ().

...