日期:2014-05-18  浏览次数:20502 次

怎样以编码(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);
}