怎样以编码(cs中)的方式更改下面按钮的 Text 文字
能不能不在ItemDataBound 时候更改 ,在Page_Load的时候就改变?
选择按钮
<asp:ButtonColumn
Text= "选择 "
DataTextField= "持股名称 "
CommandName= "Select ">
</asp:ButtonColumn>
编辑按钮
<asp:EditCommandColumn
ButtonType= "LinkButton "
UpdateText= "更新 "
CancelText= "取消 "
EditText= "编辑 ">
</asp:EditCommandColumn>
删除按钮
<asp:ButtonColumn
Text= "删除 "
ButtonType= "PushButton "
CommandName= "Delete ">
</asp:ButtonColumn>
------解决方案-------------------- <asp:ButtonColumn
Text= " <%=selectText%> "
DataTextField= "持股名称 "
CommandName= "Select ">
</asp:ButtonColumn>
------------
.aspx.cs
protected static string selectText;
page_load
{
if(Request[ "id "]= "1 ") selectText = "选择 ";
else selectText = "查看 ";
}
------解决方案--------------------能不能不在ItemDataBound 时候更改 ,在Page_Load的时候就改变?
+
因为在不同的情况下 要使text显示不同的文字,具体怎么做那?
==========
1。
我总算明白 LZ 的意思了
2。
我觉得你不明白数据列表服务器控件(以下以 DataGrid 为例)的工作方式,所以由此问题
3。
你可以在 Page_Load 中处理,但是你必须确保 DataGrid 中的 Item 已经生成,才可以访问其中的 Item
a.如果通过 DataBind() 的时候,当然必须调用此方法后才可以访问
DataItemBound 事件是每个行绑定的时候触发一次的,这里是最佳的选择特别适合访问,
如果你非要单独外部方法访问,那么
void Page_Load(....
{
// ...
MyDataGrid.DataBind();
// Item 已经生成
foreach(DataGridItem item in MyDataGridItem.Items) {
// cellIndex 指定单元格索引
LinkButton lnk = item.Cells[cellIndex].Controls[0] as LinkButton;
if(lnk == null) continue;
lnk.CommandName = "NewCommandName ";
lnk.CommandArgument = "NewCommandArgument ";
}
}
b.如果是回发页面,通过 ViewState 恢复的,你无法确定何时会创建 DataGrid的创建,但是 PreRender 阶段可以确定已经创建,因为它会强制调用创建页面所有的子控件,若未创建则创建之。
但是回发,通过 ViewState 创建DataGrid,不会触发 ItemDataBound 事件,但是 ItemCreated 事件一定会同样触发,因此,事实上 ItemCreated 这里才是首选。
------解决方案--------------------只有在呈现时,不再运行页面代码了,所以在Render事件中更改较好。
protected override void Render(HtmlTextWriter writer) {
int count = GridView1.Rows.Count;
for (int i = 0; i < count; i++) {
LinkButton lbtn = (LinkButton)GridView1.Rows[i].Cells[0].Controls[0];
lbtn.Text = "Edit ";
}
base.Render(writer);
}