0

gridview'sすべての列の最初の行に単純なリンク ボタンを追加したいと考えています。rowdataboundイベントでコードを書いた

私のコードは次のとおりです

protected void grdCompareProducts_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {


            PlaceHolder col1 = e.Row.FindControl("col1") as PlaceHolder;
            PlaceHolder col2 = e.Row.FindControl("col2") as PlaceHolder;
            PlaceHolder col3 = e.Row.FindControl("col3") as PlaceHolder;
            PlaceHolder col4 = e.Row.FindControl("col4") as PlaceHolder;

            LinkButton lnkProductName = new LinkButton();
            lnkProductName.Text = "Product Name";




            if (e.Row.RowIndex == 0)
            {
                if (col1 != null)
                {

                    col1.Controls.Add(lnkProductName);
                    col2.Controls.Add(lnkProductName);
                    col3.Controls.Add(lnkProductName);
                    col4.Controls.Add(lnkProductName);
                }
            }

        }
    }

しかし、最後の列にのみリンクボタンを表示しています。次のようなグリッド ビューの HTML ..

<asp:GridView ID="grdCompareProducts" runat="server" AutoGenerateColumns="false"
            ShowHeader="false" CssClass="compare-info" Width="100%" CellPadding="6" CellSpacing="0"
            OnRowCommand="grdCompareProducts_RowCommand" OnRowDataBound="grdCompareProducts_RowDataBound">
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:Label ID="lblHeader" runat="server" Text='<%#Eval("header") %>' CssClass="header_strong"></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:PlaceHolder ID="col1" runat="server"></asp:PlaceHolder>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:PlaceHolder ID="col2" runat="server"></asp:PlaceHolder>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:PlaceHolder ID="col3" runat="server"></asp:PlaceHolder>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:PlaceHolder ID="col4" runat="server"></asp:PlaceHolder>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
4

2 に答える 2

1

問題がわからない場合は、列ごとに新しいインスタンスを作成してみてください。つまり、if条件を次のように変更します

 LinkButton lnkProductName;
    if (col1 != null)
                {
            lnkProductName= new LinkButton();
            lnkProductName.Text = "Product Name";
                    col1.Controls.Add(lnkProductName);
            lnkProductName= new LinkButton();
            lnkProductName.Text = "Product Name2";
                    col2.Controls.Add(lnkProductName);
                }

他の列についても同様

于 2013-03-29T07:21:06.943 に答える
0

これを使って:

if (e.Row.RowIndex == 0)
        {
            if (col1 != null)
            {
                LinkButton lnkProductNameCol1 = new LinkButton();
                lnkProductNameCol1.Text = "Product Name";                   
                col1.Controls.Add(lnkProductNameCol1);

                LinkButton lnkProductNameCol2 = new LinkButton();
                lnkProductNameCol2.Text = "Product Name";                   
                col2.Controls.Add(lnkProductNameCol2);

                LinkButton lnkProductNameCol3 = new LinkButton();
                lnkProductNameCol3.Text = "Product Name";                   
                col3.Controls.Add(lnkProductNameCol3);

                LinkButton lnkProductNameCol4 = new LinkButton();
                lnkProductNameCol4.Text = "Product Name";                  
                col4.Controls.Add(lnkProductNameCol4 );
            }
        }

この助けを願っています。

于 2013-03-29T07:45:15.327 に答える