ASP.NET - 在GridView中查找标签控件

时间:2013-05-23 18:09:00

标签: asp.net gridview label

我在尝试查找GridView中的标签控件时遇到问题。 请参阅下面的代码:

<asp:GridView ID="MyGridView" runat="server">
    <Columns>
        <asp:TemplateField HeaderText="Date">
            <ItemTemplate>
                <asp:TextBox runat="server" ID="txtDate" MaxLength="10" Width="70" />
                <asp:ImageButton ID="imgScoreDate" runat="server" ImageUrl="~/images/calendar.gif" />
                <ajaxtoolkit:CalendarExtender ID="txtDate_CalendarExtender" runat="server" Enabled="True" Format="MM/dd/yyyy" TargetControlID="txtDate" PopupButtonID="imgDate" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Name">
            <ItemTemplate>
                <asp:Label ID="lblName" runat="server"/>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

这是我的.cs文件:

protected void LoadGridView()
{
    //Do something else

    foreach (GridViewRow row in MyGridView.Rows)
    {
        //Tried A
        System.Web.UI.WebControls.Label lblName = row.FindControl("lblName") as System.Web.UI.WebControls.Label;
        lblName.Text = "Name";

        //Tried B
        ((System.Web.UI.WebControls.Label)row.FindControl("lblName")).Text = "Name";
    }
}

我调试了这段代码,似乎工作正常,因为每次调试器运行时都会遇到断点。它甚至在我的foreach块中循环与我的GridView有多少行相同。

但是我不明白为什么我的lblName控件没有将“Name”文本作为值?我在这里错过了什么吗?我尝试了//Tried A//Tried B两种方法,但它们都没有更新我的标签文字。

任何帮助将不胜感激!

谢谢!干杯!

3 个答案:

答案 0 :(得分:1)

在gridview上添加:

<asp:GridView OnRowDataBound="MyGridView_RowDataBound" ... />

然后定义MyGridView_RowDataBound

void CustomersGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{
    Label l = (Label) e.Row.FindControl("lblName");
}

我认为正在发生的是控制不是在当前位置重新创建服务器端。

答案 1 :(得分:1)

您想在LoadGridView内拨打PreRender。基本上,您希望在GridView与数据绑定后调用它。

protected void Page_PreRender(object sender, EventArgs e)
{
    LoadGridView();
}

查看PreRender的{​​{1}}事件。

答案 2 :(得分:0)

试试这个 在.aspx页面

<asp:GridView ID="MyGridView" runat="server" 
        onrowdatabound="MyGridView_RowDataBound" .../>

代码背后::

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        LoadGridView();
    }
}

void LoadGridView()
{
    DataTable dt = new DataTable();
    // dt= call ur database method to get data
    MyGridView.DataSource = dt;
    MyGridView.DataBind();
}

protected void MyGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        Label lbl_Name = (Label)e.Row.FindControl("lblName");
        lbl_Name.Text = "Name";
    }
}

喝彩!