我需要根据数据集的结果选中一个复选框。如果结果为1,则应选中复选框,如果为0则不检查

时间:2013-05-25 04:11:21

标签: asp.net vb.net-2010

当我从gridview中删除一行时,它不会删除选择要删除的行,而是删除gridview的最后一行。它还清除现在是最后一行的行的用户输入,但所有其他行都保持其输入。非常感谢任何帮助。

这是我的RowDeleting子:

Protected Sub gvPDetails_RowDeleting(sender As Object, e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles gvPDetails.RowDeleting

    If ViewState("CurrentTable") IsNot Nothing Then
        Dim dt As DataTable = DirectCast(ViewState("CurrentTable"), DataTable)
        Dim delRowIndex As Integer = Convert.ToInt32(e.RowIndex)
        Dim delRow As DataRow = dt.Rows(delRowIndex)
        dt.Rows.Remove(delRow)
        SetRowData()
        ViewState("CurrentTable") = dt
    End If
End Sub

这是SetRowData()

Private Sub SetRowData()

    Dim rowIndex As Integer = 0

    Dim arrl1 As New ArrayList()
    Dim arrl2 As New ArrayList()
    Dim arrl3 As New ArrayList()

    If ViewState("CurrentTable") IsNot Nothing Then
        Dim dtCurrentTable As DataTable = DirectCast(ViewState("CurrentTable"), DataTable)
        Dim drCurrentRow As DataRow = Nothing

        If dtCurrentTable.Rows.Count > 0 Then

            For i As Integer = 0 To dtCurrentTable.Rows.Count - 1
                //extract the TextBox values 
                Dim box1 As TextBox = DirectCast(gvPDetails.Rows(rowIndex).FindControl("txtStore"), TextBox)
                //extract the DropDownList Selected Items 
                Dim ddl1 As DropDownList = DirectCast(gvPDetails.Rows(rowIndex).FindControl("ddlStatus"), DropDownList)
                Dim ddl2 As DropDownList = DirectCast(gvPDetails.Rows(rowIndex).FindControl("ddlReason"), DropDownList)
                Dim ddl3 As DropDownList = DirectCast(gvPDetails.Rows(rowIndex).FindControl("ddlPldDetail"), DropDownList)
                Dim box2 As TextBox = DirectCast(gvPDetails.Rows(rowIndex).FindControl("txtInfo"), TextBox)

                //Update the DataRow with the DDL Selected Items 
                dtCurrentTable.Rows(rowIndex)("Store") = box1.Text
                dtCurrentTable.Rows(rowIndex)("Status") = ddl1.SelectedItem.Text
                myDD1 = ddl1.SelectedItem.Text
                dtCurrentTable.Rows(rowIndex)("Reason") = ddl2.SelectedItem.Text
                myDD2 = ddl2.SelectedItem.Text
                If ddl3 IsNot Nothing And ddl3.Enabled = True Then
                    dtCurrentTable.Rows(rowIndex)("Detail") = ddl3.SelectedItem.Text
                End If

                myDD3 = ddl3.SelectedItem.Text
                dtCurrentTable.Rows(rowIndex)("Information") = box2.Text

                rowIndex += 1

                Dim MemErrList As New ArrayList()
                Dim index As Integer = -1
                Dim row As GridViewRow = gvPDetails.Rows(i)
                index = CInt(gvPDetails.DataKeys(row.RowIndex).Value)
                Dim result As Boolean = DirectCast(gvPDetails.Rows(i).FindControl("ckbMemErr"), CheckBox).Checked

                //Check in the Session
                If Session("CHECKED_ITEMS") IsNot Nothing Then
                    MemErrList = DirectCast(Session("CHECKED_ITEMS"), ArrayList)
                End If
                If result Then
                    If Not MemErrList.Contains(index) Then
                        MemErrList.Add(index)
                    End If
                Else
                    MemErrList.Remove(index)
                End If
                //Next
                If MemErrList IsNot Nothing AndAlso MemErrList.Count > 0 Then
                    Session("CHECKED_ITEMS") = MemErrList
                End If

                //----SLS File Val Checkbox Array Builder-----------------------------
                Dim DetailList As New ArrayList()
                Dim index1 As Integer = -1
                Dim row1 As GridViewRow = gvPDetails.Rows(i)
                index1 = CInt(gvPDetails.DataKeys(row1.RowIndex).Value)
                Dim result1 As Boolean = DirectCast(gvPDetails.Rows(i).FindControl("cbSLSFileVal"), CheckBox).Checked

                //Check in the Session
                If Session("DETAIL1_ITEMS") IsNot Nothing Then
                    DetailList = DirectCast(Session("DETAIL1_ITEMS"), ArrayList)
                End If
                If result1 Then
                    If Not DetailList.Contains(index1) Then
                        DetailList.Add(index1)
                    End If
                Else
                    DetailList.Remove(index1)
                End If
                //Next
                If DetailList IsNot Nothing AndAlso DetailList.Count > 0 Then
                    Session("DETAIL1_ITEMS") = DetailList
                End If

                //----Router Checkbox Array Builder-----------------------------
                Dim DetailList2 As New ArrayList()
                Dim index2 As Integer = -1
                Dim row2 As GridViewRow = gvPDetails.Rows(i)
                index2 = CInt(gvPDetails.DataKeys(row2.RowIndex).Value)
                Dim result2 As Boolean = DirectCast(gvPDetails.Rows(i).FindControl("cbRouter"), CheckBox).Checked

                //Check in the Session
                If Session("DETAIL2_ITEMS") IsNot Nothing Then
                    DetailList2 = DirectCast(Session("DETAIL2_ITEMS"), ArrayList)
                End If
                If result2 Then
                    If Not DetailList2.Contains(index2) Then
                        DetailList2.Add(index2)
                    End If
                Else
                    DetailList2.Remove(index2)
                End If
                //Next
                If DetailList2 IsNot Nothing AndAlso DetailList2.Count > 0 Then
                    Session("DETAIL2_ITEMS") = DetailList2
                End If

                //----Register1 Checkbox Array Builder-----------------------------
                Dim DetailList3 As New ArrayList()
                Dim index3 As Integer = -1
                Dim row3 As GridViewRow = gvPDetails.Rows(i)
                index3 = CInt(gvPDetails.DataKeys(row3.RowIndex).Value)
                Dim result3 As Boolean = DirectCast(gvPDetails.Rows(i).FindControl("cbRegister1"), CheckBox).Checked

                //Check in the Session
                If Session("DETAIL3_ITEMS") IsNot Nothing Then
                    DetailList3 = DirectCast(Session("DETAIL3_ITEMS"), ArrayList)
                End If
                If result3 Then
                    If Not DetailList3.Contains(index3) Then
                        DetailList3.Add(index3)
                    End If
                Else
                    DetailList3.Remove(index3)
                End If
                //Next
                If DetailList3 IsNot Nothing AndAlso DetailList3.Count > 0 Then
                    Session("DETAIL3_ITEMS") = DetailList3
                End If

                //----Register2 Checkbox Array Builder-----------------------------
                Dim DetailList4 As New ArrayList()
                Dim index4 As Integer = -1
                Dim row4 As GridViewRow = gvPDetails.Rows(i)
                index4 = CInt(gvPDetails.DataKeys(row4.RowIndex).Value)
                Dim result4 As Boolean = DirectCast(gvPDetails.Rows(i).FindControl("cbRegister2"), CheckBox).Checked

                //Check in the Session
                If Session("DETAIL4_ITEMS") IsNot Nothing Then
                    DetailList4 = DirectCast(Session("DETAIL4_ITEMS"), ArrayList)
                End If
                If result4 Then
                    If Not DetailList4.Contains(index4) Then
                        DetailList4.Add(index4)
                    End If
                Else
                    DetailList4.Remove(index4)
                End If
                //Next
                If DetailList4 IsNot Nothing AndAlso DetailList4.Count > 0 Then
                    Session("DETAIL4_ITEMS") = DetailList4
                End If
                arrl1.Add(myDD1)
                arrl2.Add(myDD2)
                arrl3.Add(myDD3)
            Next
            //dtCurrentTable.Rows.Add(drCurrentRow)
            ViewState("CurrentTable") = dtCurrentTable

            //Rebind the Grid with the current data to reflect changes 
            gvPDetails.DataSource = dtCurrentTable
            gvPDetails.DataBind()
        End If
    Else

    End If
    //Set Previous Data on Postbacks 
    SetPrevDataOnDelete(arrl1, arrl2, arrl3)
End Sub

这是SetPrevDataOnDelete(arrl1,arrl2,arrl3)

Private Sub SetPrevDataOnDelete(ByVal arrl1 As ArrayList, ByVal arrl2 As ArrayList, ByVal arrl3 As ArrayList)
    Dim rowIndex As Integer = 0
    myGridViewRow = 0
    If ViewState("CurrentTable") IsNot Nothing Then

        Dim dt As DataTable = DirectCast(ViewState("CurrentTable"), DataTable)
        If dt.Rows.Count > 0 Then
            Dim arr1 As ArrayList = arrl1
            Dim arr2 As ArrayList = arrl2
            Dim arr3 As ArrayList = arrl3

            For i As Integer = 0 To dt.Rows.Count - 1

                Dim box1 As TextBox = DirectCast(gvPDetails.Rows(rowIndex).FindControl("txtStore"), TextBox)
                Dim ddl1 As DropDownList = DirectCast(gvPDetails.Rows(rowIndex).FindControl("ddlStatus"), DropDownList)
                Dim ddl2 As DropDownList = DirectCast(gvPDetails.Rows(rowIndex).FindControl("ddlReason"), DropDownList)
                Dim ddl3 As DropDownList = DirectCast(gvPDetails.Rows(rowIndex).FindControl("ddlPldDetail"), DropDownList)
                Dim box2 As TextBox = DirectCast(gvPDetails.Rows(rowIndex).FindControl("txtInfo"), TextBox)
                Dim cbResult As CheckBox = DirectCast(gvPDetails.Rows(rowIndex).FindControl("ckbMemErr"), CheckBox)


                //Fill the DropDownList with Data
                myGridViewRow = i
                //FillDropDownList(ddl1)
                FillDDL2OnDel(arrl1, rowIndex)
                FillDDL3OnDel(arrl1, arrl2, rowIndex)

                If i < dt.Rows.Count - 1 Then
                    //Assign the value from DataTable to the TextBox 
                    //gvPDetails.Rows(i).Cells(0).Text = Convert.ToString(i + 1)
                    box1.Text = dt.Rows(rowIndex)("Store").ToString()
                    box2.Text = dt.Rows(rowIndex)("Information").ToString()

                    ddl1.Items.FindByText(dt.Rows(rowIndex)("Status").ToString()).Selected = True
                    If ddl2 Is Nothing Then

                    ElseIf ddl2 Is Nothing Then

                    ElseIf ddl2 IsNot Nothing And ddl2.Enabled = True Then
                        ddl2.Items.FindByText(dt.Rows(rowIndex)("Reason").ToString()).Selected = True
                    End If

                    If ddl3 IsNot Nothing And ddl3.Enabled = True Then
                        ddl3.Items.FindByText(dt.Rows(rowIndex)("Detail").ToString()).Selected = True
                    End If


                    Dim MemErrList As ArrayList = DirectCast(Session("CHECKED_ITEMS"), ArrayList)
                    If MemErrList IsNot Nothing AndAlso MemErrList.Count > 0 Then
                        Dim row As GridViewRow = gvPDetails.Rows(i)
                        Dim index As Integer = CInt(gvPDetails.DataKeys(row.RowIndex).Value)
                        If MemErrList.Contains(index) Then
                            Dim myCheckBox As CheckBox = DirectCast(row.FindControl("ckbMemErr"), CheckBox)
                            myCheckBox.Checked = True
                        End If
                        //Next
                    End If

                    Dim DetailList As ArrayList = DirectCast(Session("DETAIL1_ITEMS"), ArrayList)
                    If DetailList IsNot Nothing AndAlso DetailList.Count > 0 Then
                        Dim row As GridViewRow = gvPDetails.Rows(i)
                        Dim index1 As Integer = CInt(gvPDetails.DataKeys(row.RowIndex).Value)
                        If DetailList.Contains(index1) Then
                            Dim myCheckBox1 As CheckBox = DirectCast(row.FindControl("cbSLSFileVal"), CheckBox)
                            myCheckBox1.Checked = True
                        End If
                        //Next
                    End If

                    Dim DetailList2 As ArrayList = DirectCast(Session("DETAIL2_ITEMS"), ArrayList)
                    If DetailList2 IsNot Nothing AndAlso DetailList2.Count > 0 Then
                        Dim row As GridViewRow = gvPDetails.Rows(i)
                        Dim index2 As Integer = CInt(gvPDetails.DataKeys(row.RowIndex).Value)
                        If DetailList2.Contains(index2) Then
                            Dim myCheckBox2 As CheckBox = DirectCast(row.FindControl("cbRouter"), CheckBox)
                            myCheckBox2.Checked = True
                        End If
                        //Next
                    End If

                    Dim DetailList3 As ArrayList = DirectCast(Session("DETAIL3_ITEMS"), ArrayList)
                    If DetailList3 IsNot Nothing AndAlso DetailList3.Count > 0 Then
                        Dim row As GridViewRow = gvPDetails.Rows(i)
                        Dim index3 As Integer = CInt(gvPDetails.DataKeys(row.RowIndex).Value)
                        If DetailList3.Contains(index3) Then
                            Dim myCheckBox3 As CheckBox = DirectCast(row.FindControl("cbRegister1"), CheckBox)
                            myCheckBox3.Checked = True
                        End If
                        //Next
                    End If

                    Dim DetailList4 As ArrayList = DirectCast(Session("DETAIL4_ITEMS"), ArrayList)
                    If DetailList4 IsNot Nothing AndAlso DetailList4.Count > 0 Then
                        Dim row As GridViewRow = gvPDetails.Rows(i)
                        Dim index4 As Integer = CInt(gvPDetails.DataKeys(row.RowIndex).Value)
                        If DetailList4.Contains(index4) Then
                            Dim myCheckBox4 As CheckBox = DirectCast(row.FindControl("cbRegister2"), CheckBox)
                            myCheckBox4.Checked = True
                        End If
                        //Next
                    End If

                End If
                rowIndex += 1
            Next
        End If
    End If
End Sub

再次感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

e.RowIndex是否返回了您期望的正确行号?