0

gridviewがあり、その行でforeachを実行し、 この行の1つのセルのラベルがある列のヘッダーから値を取得したいと思います。

foreach (GridViewRow mainRow in grid1.Rows)
{
    var header = mainRow.Cells[2].Parent.FindControl("LabelID");//is null
}

どうすれば見つけられますか?

4

2 に答える 2

2

RowDataBoundイベントの値が必要な場合は、次のようにRowTypeを確認できます。

if(e.Row.RowType == DataControlRowType.Header)
{
    Label header = (Label)e.Row.FindControl("LabelID");
}
于 2012-08-30T08:45:03.283 に答える
1

headerRowにアクセスし、それに応じたセルを列挙します( buttonClickまたはRowDataBoundで...)。

default.aspx

<asp:GridView AutoGenerateColumns="false" ID="GridView1" runat="server">
    <Columns>
        <asp:TemplateField>
            <HeaderTemplate>
                <asp:Label ID="headerLabel1" runat="server" Text="Headercolumn1"></asp:Label>
            </HeaderTemplate>
            <ItemTemplate>
                <asp:Label ID="itemLabel1" runat="server" Text='<%# Eval("name") %>' />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
<asp:Button ID="btnGetHeader" runat="server" Text="GetHeader" OnClick="btnGetHeader_Click" />

default.aspx.cs

protected void btnGetHeader_Click(object sender, EventArgs e)
{
    foreach (TableCell headerCell in GridView1.HeaderRow.Cells)
    {
        // or access Controls with index 
        //     headerCell.Controls[INDEX]
        Label lblHeader = headerCell.FindControl("headerLabel1") as Label;
        if (lblHeader != null)
            Debug.WriteLine("lblHeader: " + lblHeader.Text);
    }
}
于 2012-08-30T08:57:18.953 に答える