Jun*_*son 9 asp.net aspxgridview
我在ASPxGridView中有这样的复选框:
<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>
Run Code Online (Sandbox Code Playgroud)
它在加载复选框时很好地绑定,这里的函数:
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
Run Code Online (Sandbox Code Playgroud)
问题是,当检查checked状态时,它总是返回加载的值.如果状态是checked第一次加载然后我执行uncheckedCheckBox,它仍然会返回checked.这里我如何获取值并将其保存到数据库:
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
Run Code Online (Sandbox Code Playgroud)
添加
我在这里如何绑定数据:
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
Run Code Online (Sandbox Code Playgroud)
这里的Load_menu()功能:
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
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
这是会话绑定问题,它检查会话是否可用,然后数据源将与其绑定。代码是:
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
Run Code Online (Sandbox Code Playgroud)
我删除了该变量,一切正常。
如果我删除会话检查器,搜索和排序就会出现问题。我通过搜索一些更适合的文章找到了新的解决方案,并且 ASPxGridView 中的搜索/排序功能仍然有效。
在 init 中调用load_menu()函数是这种情况的最佳方法:
Private Sub Page_Init(sender As Object, e As EventArgs) Handles Me.Init
Call Load_menu()
End Sub
Run Code Online (Sandbox Code Playgroud)
对于这种情况,您可以删除会话变量。如果此解决方案有问题,请告诉我。
| 归档时间: |
|
| 查看次数: |
319 次 |
| 最近记录: |