8
我复选框在ASPxGridView这样的:获取CheckBox.Checked在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>
它很好地结合时,该复选框加载,这里的功能:
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
。在这里,我怎么得到的值,并将其保存到数据库:
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
ADDED
在这里,我如何绑定数据:
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()
功能:
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
我在这里错过了什么?任何帮助将被认可。谢谢。
如何以及何时将数据绑定到GridView?如果您未将数据绑定包装在“IsPostBack”检查中,每次发生PostBack时,复选框的状态将被其数据库值覆盖。 – VDWWD
您也正在使用loadingStatus作为参数调用您的checked函数,所以无论何时它被选中或取消选中,它都会使用加载参数调用加载函数 – MaCron
不太确定我是否完全理解该案例,但我认为这可能是' LoadPostData()'在代码中缺少。尝试在这行之后调用'DirectCast(btSimpan,IPostBackDataHandler).LoadPostData(btSimpan.UniqueID,Request.Form)'Dim loadingStatus As DevExpress.Web.ASPxEditors.ASPxCheckBox = ....'并参阅。顺便说一句,我没有真正进入VB.NET,所以我将我的C#代码片段转换为这一片。原来在C#中是((IPostBackDataHandler)btSimpan).LoadPostData(btSimpan.UniqueID,Request.Form);'。希望能帮助到你..如果是这样,请告诉我,我明天会发布完整答案。祝你好运:) –