我有一个嵌套的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:如果有人不喜欢这个问题,你可以在得到答案后删除它而不是投票或标记它。
答案 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旁边。