我在尝试查找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
两种方法,但它们都没有更新我的标签文字。
任何帮助将不胜感激!
谢谢!干杯!
答案 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";
}
}
喝彩!