Запрос относительно привязки метки в gridView ItemTemplate к String - PullRequest
1 голос
/ 01 апреля 2011

У меня есть вложенный gridview, который позволяет вызывать родительский gridview как gridview1, а дочерний gridview как gridview2.

Для каждой строки родительского gridview (gridview1) я добавляю дочерний gridview (gridview2) в зависимости от номера счета, которыйприсутствует на этой конкретной строке в gridview1.Вот снимок экрана этого вывода здесь .

Внутри дочернего gridview (т. Е. Gridview2) у меня есть кнопка ссылки для скачивания, которую я добавляю через шаблон элемента и название программного обеспечения, которые я привязываю к gridview2 после фильтрации вывода, полученного через List <>.Но, как вы можете видеть, кнопка ссылки на скачивание сначала обрабатывается, а затем - названия программного обеспечения.Но я хочу, чтобы заголовки программного обеспечения отображались первыми, а кнопка ссылки на скачивание - как последний столбец в дочернем 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 с источником данных (который является массивом, который я фильтрую на основе номера счета-фактуры, присутствующего в родительском gridview (т.е., 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();
        }
    }

Кстати, я использую Visual Studio 2008, asp.net/c# и не LINQ в моем проекте веб-приложения.Пожалуйста, помогите мне.

Спасибо в ожидании

PS: Если кому-то не понравится этот вопрос, вы можете удалить его после получения ответа, а не голосования или пометки.

1 Ответ

1 голос
/ 02 апреля 2011

1: добавьте AutoGenerateColumns = "false" к вашему gv2

2: <% # Container.DataItem%> непосредственно перед кнопкой ссылки

<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 вместо того, чтобы добавлять его в тот же, что и существующий, но вы получите представление, почему он отображается рядом с кнопкой ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...