在vs2008中使用Aspnet,C#3.5:
我在gridview或listview模板化列中成功使用了以下代码:
<asp:Button ID="btnShow" runat="server" Text="?"
TabIndex="-1" CommandName="ShowDefinition"
CommandArgument='<%# Eval("PKey") %>' />
使用代码来获取单击按钮的行的标识符。 :
protected void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e)
{
if (e.CommandName == "ShowDefinition")
{
int showRecordPKey = Convert.ToInt32(e.CommandArgument);
}
}
现在我正试图动态地(有条件地)将该按钮放在列中。
我尝试使用带有以下代码的占位符来执行此操作:
public class BtnShow
{
public Button btnShow = new Button();
PlaceHolder ph = new PlaceHolder();
public BtnShow(string commandName,string displayText, PlaceHolder ph)
{
btnShow.ID = "btnShow";
btnShow.Text = "?";
btnShow.TabIndex = -1 ;
btnShow.CommandName = "ShowDefinition";
btnShow.CommandArgument = "(<%# Eval('PKey') %>" ;
this.ph = ph;
}
public void AddQuMarkToPlaceholder()
{
ph.Controls.Add(btnShow);
}
生成按钮但不评估命令参数,即字符串 “(&lt;%#Eval('PKey')%&gt;”作为命令参数传递。
我怎样才能做我想做的事?
答案 0 :(得分:1)
使用RowCommand而不是ItemCommand,这有效:
protected void ListView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
GridViewRow row = (GridViewRow)
((( Button) e.CommandSource ).NamingContainer);
Label pk = (Label) row.FindControl("lblPKey");
int showRecordPKey = Convert.ToInt32(pk.Text);
}