首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RowDataBound DropDownList

RowDataBound DropDownList
EN

Stack Overflow用户
提问于 2012-11-27 12:04:21
回答 1查看 1.3K关注 0票数 0

我有一个RowDataBound事件处理程序,如下所示:

代码语言:javascript
复制
Public Sub CustomersGridView_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles GVHistoricNames.RowDataBound 'RowDataBound
    If e.Row.RowType = DataControlRowType.DataRow Then
        Dim hyperlinkUSNHyperlink As HyperLink = CType(e.Row.FindControl("USNHyperlink"), HyperLink)
        Dim ddl As DropDownList = CType(e.Row.FindControl("ddlUsercode"), DropDownList)
        If ddl.SelectedValue = "" Then 'labLastUserCode.Text = "" Then
            hyperlinkUSNHyperlink.NavigateUrl = ""
        End If
    End If
 End Sub

...and是一个如下所示的RowCreated事件处理程序:

代码语言:javascript
复制
Public Sub CustomersGridView_RowCreated(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles GVHistoricNames.RowCreated 'RowDataBound
    If e.Row.RowType = DataControlRowType.DataRow Then
        Dim ddl As DropDownList = CType(e.Row.FindControl("ddlUsercode"), DropDownList)
        ddl.Items.Add("")
        ddl.Items.Add(strUserName)
    End If
End Sub

...and是一个如下所示的RowUpdating事件处理程序:

代码语言:javascript
复制
Protected Sub GVHistoricNames_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GVClearcoreHistoricNames.RowUpdating
    Try
        Dim ddl As DropDownList = CType(GVHistoricNames.Rows(e.RowIndex).FindControl("ddlUsercode"), DropDownList)
        SQLHistoricNames.UpdateParameters("UserCode").DefaultValue = ddl.SelectedValue

    Catch ex As Exception

    Finally

    End Try
End Sub

请参阅RowUpdating事件处理程序的第三行。SelectedValue属性的值永远不会正确,因为RowDataBound事件处理程序是在RowUpdating事件处理程序之后调用的。如何访问SelectedValue?我想把它设置为更新参数。

EN

回答 1

Stack Overflow用户

发布于 2012-11-27 12:16:00

其中一种方法可以是查看实际的请求数据。例如,在GVHistoricNames_RowUpdating代码中,使用

代码语言:javascript
复制
Dim ddl As DropDownList = CType(GVHistoricNames.Rows(e.RowIndex).FindControl("ddlUsercode"), DropDownList)
SQLHistoricNames.UpdateParameters("UserCode").DefaultValue = Request(ddl.UiniqueID)

在post数据可以加载到控件之前(或者在以后的事件中动态添加/绑定控件时),我经常使用这样的操作--当需要控件值时。

编辑

ASP.NET使用Control.UniqueId来表示相应的html元素的name属性。它(以及ClientID)通常是通过将控件的id附加到父(命名容器的父级)的唯一id来构造的,因此您可以为网格中的多个下拉列表获得不同的唯一id(和客户id)(因为每行充当一个命名容器)。

就您的问题而言,您可能正在设计时模板中创建下拉列表,同时将列表项加载到创建的行中。但是,在触发行创建事件之前,下拉列表应该已经添加到页面控制树中,并且其POST事件已经被处理过了。在这种情况下,此时下拉列表中没有设置所选内容的项。这就是问题所在。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13583882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档