Отправить параметр в addhandler? - PullRequest
1 голос
/ 02 июня 2009

У меня есть кнопка в сетке, которую я создал программно. Кнопка редактирует некоторые данные в таблице, используя данные в скрытом столбце сетки, в которой находится кнопка. Обычно я отправляю скрытое поле данных строки, используя javascript onclientclick кнопки, затем вносю изменения в базу данных, используя это скрытое поле. Но должен быть способ отправить аддандлеру кнопки параметр. Это код, который я должен уточнить ....

Dim btnedit As New ImageButton
    AddHandler btnedit.Click, AddressOf btnedit_Click
    btnedit.ImageUrl = "\images\bttnEditMini.gif"

If e.Row.RowType <> DataControlRowType.Header And e.Row.RowType <> DataControlRowType.Footer Then
        e.Row.Cells(3).Controls.Add(btnedit)
End If

вот мой Addhandler с его делегатом:

Public Delegate Sub ImageClickEventHandler(ByVal sender As Object, ByVal e As ImageClickEventArgs)
Sub btnedit_Click(ByVal sender As Object, ByVal e As ImageClickEventArgs)
//programming stuff
End Sub

Как я могу отправить этому обработчику параметр?

Ответы [ 4 ]

3 голосов
/ 02 июня 2009

По договоренности все обработчики событий принимают два параметра: отправитель и EventArgs. Если вам нужно отправить пользовательскую информацию слушателям, создайте новый класс, который наследуется от EventArgs и содержит информацию, с которой вам нужно связаться.

Ознакомьтесь с этой статьей на CodeProject , в которой показано, как это сделать.

1 голос
/ 02 июня 2009

Краткий ответ: нет. Куда бы вы отправили? У вас есть два параметра.

Более длинный ответ: отправитель - это элемент управления, отправивший событие. В этом случае это будет ваш элемент управления btnEdit. Может быть, это поможет вам.

0 голосов
/ 03 июня 2009

Если вы не хотите использовать «стандартные» / уже определенные параметры, вы можете создавать свои собственные события.

0 голосов
/ 03 июня 2009

Поскольку это было в сетке, я просто использовал вместо этого команду строки. И когда используется команда Row, вы можете отправить ей имя команды и аргумент команды. Я передал свой параметр в качестве аргумента.

 GridView1.Rows(i).Cells(3).Controls.Add(btndel)
            btndel.ImageUrl = "\images\bttnDelete.gif"
            btndel.ToolTip = "This will delete the Selected Assignment"
            btndel.CommandName = "destroy"
            btndel.CommandArgument = GridView1.Rows(i).Cells(0).Text
            btndel.Attributes.Add("onclick", "javascript: if(confirm('Are you sure you want to delete this Department Cost Days Assignment?')==false) return false;")

вот команда строки:

Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand
    If e.CommandName = "destroy" Then 'used destroy because Delete command was prohibited.
       Call Connection()
        Dbcmd.CommandText = "Delete from table where condition = '" & e.CommandArgument & "'"
        Dbcmd.ExecuteNonQuery()
        Dbconn.Close()
        Dbconn.Dispose()
    End If
...