有关将gridview ItemTemplate中的标签绑定到String的查询

时间:2011-04-01 09:56:18

标签: asp.net gridview

我有一个嵌套的gridview,我们可以将grid grid1调用gridview1,将子gridview调用为gridview2。

对于每个父网格视图(gridview1)行,我将添加子网格视图(gridview2),具体取决于gridview1中该特定行上存在的发票编号。以下是该输出here的屏幕截图。

在子网格视图(即gridview2)中,我有一个下载链接按钮,我通过项目模板和软件标题添加,我在过滤输出后通过List<>进行数据绑定到gridview2。但是你可以看到下载链接按钮首先呈现,然后是软件标题。但我希望首先渲染软件标题并下载链接按钮作为子gridview中的最后一列(即gridview2)。

以下是嵌套网格视图的.aspx页面中的代码。我从这个论坛的成员那里得到了一个建议,我可以在下载链接按钮之前添加标签并将其与数据源相关联。我无法理解。怎么能这样做?

 <asp:GridView ID="UserTransactionGridView" runat="server" AutoGenerateColumns="False"
    DataSourceID="SqlDataSource1" OnRowDataBound="UserTransactionGridView_RowDataBound"
    HorizontalAlign="Center" AllowPaging="true">
    <Columns>
        <asp:BoundField DataField="Date Of Transaction" HeaderText="Date Of Transaction"
            SortExpression="Date Of Transaction" ItemStyle-HorizontalAlign="Center" />
        <asp:BoundField DataField="Invoice Number" HeaderText="Invoice Number" SortExpression="Invoice Number"
            ItemStyle-HorizontalAlign="Center" />
        <asp:BoundField DataField="totalAmount" HeaderText="Total Amount" ReadOnly="True"
            SortExpression="totalAmount" ItemStyle-HorizontalAlign="Center" />
        <asp:TemplateField>
            <HeaderTemplate>
                <asp:Label Text="Software Title" ID="softwareLbl" runat="server"></asp:Label>
            </HeaderTemplate>
            <ItemTemplate>
                <asp:GridView ID="gridView2" runat="server" HorizontalAlign="Left" GridLines="None"
                    ShowHeader="false">
                    <Columns>
                        <asp:TemplateField ItemStyle-HorizontalAlign="Center" ItemStyle-Width="100px">
                            <ItemTemplate>
                                <asp:LinkButton ID="DownloadLbtn" Text="Download" runat="server" OnClick="DownloadLbtn_Click"></asp:LinkButton>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:componentConnString %>"
    SelectCommand="SelectUserPreviousHistory" SelectCommandType="StoredProcedure">
    <SelectParameters>
        <asp:Parameter DefaultValue="xyz" Name="userName" Type="String" />
    </SelectParameters>
</asp:SqlDataSource>

顺便说一下,这里是我用数据源绑定子gridview的代码(这是我根据父网格视图上显示的发票号过滤的arraylist(即gridview1))。

 protected void UserTransactionGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            GridView gridView2 = (GridView)e.Row.FindControl("gridView2");
            System.Data.DataRowView dr = (System.Data.DataRowView)e.Row.DataItem;
            gridView2.AutoGenerateColumns = true;
            String x = dr[1].ToString();
            softwareTitlesList = SoftwareListRetrieve();
            ArrayList titles = new ArrayList();
            foreach (SoftwareTitles softwareTitle in softwareTitlesList)
            {
                if (softwareTitle.InvoiceNumber.Contains(x))
                    titles.Add(softwareTitle.SoftwareTitle);
            }
            gridView2.DataSource = titles;
            gridView2.DataBind();
            softwareTitlesList.Clear();
        }
    }

BTW我在我的网络应用程序项目中使用Visual Studio 2008,asp.net / c#和没有LINQ。 请帮我。

感谢您的期待

PS:如果有人不喜欢这个问题,你可以在得到答案后删除它而不是投票或标记它。

1 个答案:

答案 0 :(得分:1)

1:将 AutoGenerateColumns =“false”添加到您的gv2

2:&lt;%#Container.DataItem%&gt; 就在linkbutton之前

<asp:GridView ID="gridView2" runat="server" HorizontalAlign="Left" GridLines="None" ShowHeader="false" AutoGenerateColumns="false">
    <Columns>
        <asp:TemplateField ItemStyle-HorizontalAlign="Center" ItemStyle-Width="100px">
            <ItemTemplate>
                <%#Container.DataItem %>
                <asp:LinkButton ID="DownloadLbtn" Text="Download" runat="server" OnClick="DownloadLbtn_Click"></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

你可以添加一个单独的TemplateField,而不是在现有的TemplateField之前添加相同的模板,但是你知道它为什么显示在linkbutton旁边。

相关问题