如何从其他列表项中绑定gridview的itemtemplate

时间:2014-05-27 12:50:37

标签: c# asp.net gridview

我不知道是否可能。但我想知道是否有可能发生以下情况: 我有一个gridview链接到objectdatasource。此objectdatasource具有票证对象列表。此票证对象包含多个ID的属性。我们来看一下例如computerID。我有另一个列表,其中类Computer具有属性computerID和ComputerName。 我想要实现的是当gridview加载到computername而不是computerID时。

<asp:GridView ID="gvTickets" runat="server" AutoGenerateColumns="False"
    DataKeyNames="ID" DataSourceID="odsTickets" AllowPaging="True">
       <Columns>
        <asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" Visible="false" />
        <asp:BoundField DataField="FullID" HeaderText="FullID" SortExpression="FullID"></asp:BoundField>

        <asp:TemplateField HeaderText="ComputerID">

            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%# Bind("ComputerID") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="StatusID" HeaderText="StatusID" ></asp:BoundField>
        <asp:BoundField DataField="CategoryID" HeaderText="CategoryID"></asp:BoundField>
    </Columns></SelectedRowStyle>
</asp:GridView>

odsTickets包含一个检索List

的select语句
Class Ticket
{
private int computerID;
public int ComputerID
    {
        get { return computerID; }
        set { computerID = value; }
    }
}

我有一个缓存中的计算机列表列表,我想从中检索该数据。

Class Computer
{
private int computerID;
public int ComputerID
    {
        get { return computerID; }
        set { computerID = value; }
    }
private string computerName;
public string ComputerName
    {
        get { return computerID; }
        set { computerID = value; }
    }
}

1 个答案:

答案 0 :(得分:1)

试试这个:

<asp:TemplateField HeaderText="ComputerName">

        <ItemTemplate>
            <asp:Label ID="Label2" runat="server" Text='<%# this.ComputerListFromCache.First(x => x.ComputerId == Convert.ToInt32(Eval("ComputerID"))).ComputerName %>'>  </asp:Label>
        </ItemTemplate>
    </asp:TemplateField>

使用linq通过Id从列表中获取Computer对象并获取ComputerName的值(它假定可以从具有网格视图且该列表不是'私有'的页面访问'ComputerListFromCache')。