Установить CommandArgument динамически создаваемой кнопки в виде сетки или списка - PullRequest
0 голосов
/ 11 сентября 2009

Использование Aspnet, C # 3.5 в версии 2008:

Я успешно использовал следующий код в столбце шаблонов вида сетки или списка:

<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); 
}

Кнопка генерируется, но аргумент команды не оценивается, строка «(<% # Eval ('PKey')%>» передается в качестве аргумента команды.

Как я могу делать то, что пытаюсь сделать?

1 Ответ

1 голос
/ 11 сентября 2009

Используя 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); 
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...