0

我在尝试查找 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控件没有将“名称”文本作为值?我在这里错过了什么吗?我尝试了这两种方法//Tried A//Tried B但它们都没有更新我的标签文本。

任何帮助,将不胜感激!

谢谢!干杯!

4

3 回答 3

1

在您的网格视图上添加:

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

然后定义MyGridView_RowDataBound

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

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

于 2013-05-23T18:17:47.020 回答
1

你想在LoadGridView里面打电话PreRender。基本上,您想在GridView与数据绑定后调用它。

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

查看ASP.NET Page Life CyclePreRender的事件。

于 2013-05-23T18:58:22.743 回答
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";
    }
}

干杯!

于 2013-05-24T07:20:47.927 回答