0

У меня есть 2 классов:Как связать объект класса с сеткой через другой объект класса?

public class clsShipper 
{ 
    public string ShipperName { get; set; } 
} 

и

public class clsJobInfo 
{ 
    public long JobID { get; set; } 

    public clsShipper oShipper = new clsShipper(); 
} 

Мой GridView следующим образом

<asp:GridView ID="dgvJobCostList" runat="server" CellPadding="4" ForeColor="#333333" style="font-family:Verdana;font-size:10px;" AutoGenerateColumns="False" OnSelectedIndexChanged="dgvJobCostList_SelectedIndexChanged"> 
    <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> 
    <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
    <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> 
    <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> 
    <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
    <EditRowStyle BackColor="#999999" /> 
    <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> 
    <Columns> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:CheckBox ID="chkRowCheck" runat="server" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="ID"> 
      <ItemTemplate> 
       <asp:Label ID="lblJobID" runat="server" Text='<%# Bind("JobID") %>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Shipper"> 
      <ItemTemplate> 
      <asp:Label ID="lblShipperName" runat="server" Text='<%# Bind("ShipperName") %>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

Я пытаюсь связать ShipperName свойство Грузовладелец класса через объект JobInfo класса , Я попытался ниже

protected void btnSearch_Click(object sender, EventArgs e) 
{ 
    if (oOutputJobInfo.Length < 1) 
    { 
     lblMessage.Text = "Error : No Data Found"; 
     lblMessage.Visible = true; 
     return; 
    } 
    else 
    { 
     dgvJobCostList.DataSource = oOutputJobInfo; 
     dgvJobCostList.DataBind(); 
     dgvJobCostList.Visible = true; 
    } 
} 

Но дает ниже ошибки

DataBinding: 'Nucleus.BOL.clsJobInfo' не содержит свойство с именем 'ShipperName'.

+0

также пробовал это ** ** вместо ** ** но не повезло –

+0

Вы не должны называть классы с префиксом 'cls'! – abatishchev

+1

@abatishchev, yeh! Но это конвенция, в которой я следую. Невозможно изменить его. :( –

ответ

2

Импортируйте пространство имен следующим образом:

<%@ Import namespace="MyNamespace.ToclsJobInfo" %> 

И вы, возможно, потребуется пространство имен для clsShipper, если иное, чем clsJobInfo

Тогда вы можете бросить/распаковывать clsJobInfo и использовать свойство oShipper

<asp:TemplateField HeaderText="Shipper">  
    <ItemTemplate>  
    <asp:Label ID="lblShipperName" runat="server" Text='<%# ((clsJobInfo)Container.DataItem).oShipper.ShipperName %>' />  
    </ItemTemplate> 
</asp:TemplateField> 
+0

I попробовали это ** **, но это дает эта ошибка времени компиляции ** Ошибка Не удалось найти тип или имя пространства имен 'clsShipper' (вам не хватает директивы using или ссылки на сборку?) ** –

+0

Обновлен ответ, чтобы показать использование импорта. –

+0

Кроме того, я не думайте, что вам нужен DataBinder.Eval при распаковке. –

Смежные вопросы