首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >让CheckBox.Checked在ASPxGridView中不正常工作

让CheckBox.Checked在ASPxGridView中不正常工作
EN

Stack Overflow用户
提问于 2017-08-28 10:02:37
回答 1查看 1K关注 0票数 9

我在ASPxGridView中有这样的复选框:

代码语言:javascript
运行
复制
<dxwgv:ASPxGridView ID="Grid_Loading_Plan_Detail" runat="server" >          
...
<dxwgv:GridViewDataColumn Caption="#" VisibleIndex="1">
<DataItemTemplate>
<dxe:ASPxCheckBox ID="loadingStatus" runat="server" Checked='<%# GetChecked(Eval("loadingStatus").ToString()) %>'></dxe:ASPxCheckBox>
</DataItemTemplate>
</dxwgv:GridViewDataColumn>
...
</dxwgv:ASPxGridView>

在加载复选框时,它可以很好地绑定,下面是函数:

代码语言:javascript
运行
复制
Public Function GetChecked(value As String) As Boolean
    Select Case value
        Case "1"
            Return True
        Case "0"
            Return False
        Case Else
            Return False
    End Select
End Function

问题是,当检查checked状态时,它总是返回加载的值。如果第一次加载时状态为checked,然后执行unchecked CheckBox,则仍然返回checked。在这里,我如何获取值并将其保存到数据库中:

代码语言:javascript
运行
复制
Protected Sub btSimpan_Click(sender As Object, e As EventArgs) Handles btSimpan.Click
    Try
        sqlstring = ""
        For i As Integer = 0 To Grid_Loading_Plan_Detail.VisibleRowCount - 1
            Dim loadingStatus As DevExpress.Web.ASPxEditors.ASPxCheckBox = Grid_Loading_Plan_Detail.FindRowCellTemplateControl(i, Grid_Loading_Plan_Detail.Columns(1), "loadingStatus")

            sqlstring = sqlstring & " UPDATE containerTransaction SET loadingStatus = '" & IIf(loadingStatus.Checked, "1", "0") & "' " & _
                        " WHERE ID = '" & Grid_Loading_Plan_Detail.GetRowValues(i, "ID") & "'; "
        Next

        If SQLExecuteNonQuery(sqlstring) > 0 Then
            Response.Redirect("loading-plan.aspx")
        End If
    Catch ex As Exception
        Response.Write("Error btSimpan_Click <BR> " & ex.ToString)
    End Try
End Sub

添加了

在这里,我如何绑定数据:

代码语言:javascript
运行
复制
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Try
        If Not Page.IsPostBack Then
            Call Load_menu()
        End If
    Catch ex As Exception
        Response.Write("Page_Load Exception :<br>" & ex.ToString)
    End Try

    If Not Session("Grid_Loading_Plan_Detail") Is Nothing Then
        Grid_Loading_Plan_Detail.DataSource = CType(Session("Grid_Loading_Plan_Detail"), DataTable)
        Grid_Loading_Plan_Detail.DataBind()
    End If
End Sub

这里是Load_menu()函数:

代码语言:javascript
运行
复制
Private Sub Load_menu()
    Try
        sqlstring = "SELECT ID, code, date, container, seal, sender, receiver, [weight], loadingStatus " & _
            "FROM containerTransaction " & _
            "WHERE loadingCode = (SELECT TOP 1 code FROM loadingPlan WHERE ID = '" & ID & "') AND [status] = 1 " & _
            "ORDER BY [weight] "
        DS = SQLExecuteQuery(sqlstring)
        DT = DS.Tables(0)
        Session("Grid_Loading_Plan_Detail") = DT
        Grid_Loading_Plan_Detail.DataSource = DT
        Grid_Loading_Plan_Detail.KeyFieldName = "ID"
        Grid_Loading_Plan_Detail.DataBind()
    Catch ex As Exception
        Response.Write("Load_Menu Exception :<br>" & ex.ToString)
    End Try
End Sub

我错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-02 04:47:01

这是会话绑定问题,它检查会话是否可用,然后数据源将与之绑定。守则是:

代码语言:javascript
运行
复制
If Not Session("Grid_Loading_Plan_Detail") Is Nothing Then
    Grid_Loading_Plan_Detail.DataSource = CType(Session("Grid_Loading_Plan_Detail"), DataTable)
    Grid_Loading_Plan_Detail.DataBind()
End If

我去掉了那个变量,一切都很好。

编辑

如果我删除了会话检查器,它在搜索和排序方面就会有问题。我有新的解决方案,从搜索一些文章更适合和搜索/排序功能在ASPxGridView仍然有效。

在init中调用load_menu()函数是最好的方法:

代码语言:javascript
运行
复制
Private Sub Page_Init(sender As Object, e As EventArgs) Handles Me.Init
    Call Load_menu()
End Sub

您可以删除这种情况下的会话变量。如果这个解决方案有问题,请告诉我。

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

https://stackoverflow.com/questions/45916438

复制
相关文章

相似问题

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