XtraGrid向上和向下移动网格行

时间:2015-08-27 05:04:16

标签: .net vb.net devexpress xtragrid

如本DevExpress thread所述,我能够上下移动网格行。但是,只要我使用主键约束从数据库添加表,它就会停止工作。投掷例外:

  

列'Id'被限制为唯一。值'101'已经存在

这是我的 MoveDown 代码:

Private Sub BtnMveDwn_Click(sender As Object, e As EventArgs) Handles BtnMveDwn.Click

    Dim lObjGrdVew As GridView
    Dim lObjDtaTbl As DataTable
    Dim lIntIndex As Integer
    Dim lObjTmpRow As Object
    Try
        lObjGrdVew = CType(GrdCntrlMain.FocusedView, GridView)
        lObjDtaTbl = TryCast(GrdCntrlMain.DataSource, DataTable)
        lIntIndex = lObjGrdVew.FocusedRowHandle

        lObjGrdVew.GridControl.Focus()

        If lIntIndex >= lObjGrdVew.DataRowCount - 1 Then
            Return
        End If

        lObjTmpRow = lObjDtaTbl(lObjGrdVew.ViewRowHandleToDataSourceIndex(lIntIndex + 1)).ItemArray

        lObjDtaTbl(lObjGrdVew.ViewRowHandleToDataSourceIndex(lIntIndex + 1)).ItemArray = lObjDtaTbl(lObjGrdVew.ViewRowHandleToDataSourceIndex(lIntIndex)).ItemArray

        lObjDtaTbl(lObjGrdVew.ViewRowHandleToDataSourceIndex(lIntIndex)).ItemArray = lObjTmpRow

        lObjGrdVew.FocusedRowHandle += 1
        lObjGrdVew.UnselectRow(lObjGrdVew.FocusedRowHandle - 1)
        lObjGrdVew.SelectRow(lObjGrdVew.FocusedRowHandle)

    Catch ex As Exception
        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
    End Try

End Sub

对于这个thread,我没有尝试,但当然如果列数更高,我必须遍历所有列。即,循环。

谢谢

编辑1 请不要拖放代码。我在按钮上点击它。

编辑2 这儿存在一个问题!我的行有暗淡可见的展开按钮。就像,如果存在子行,那么展开按钮将是正确的可见但是暗淡,否则就像正常的网格行为一样。但是当交换行时,展开按钮不会改变它们的状态,这是错误的和不合需要的。你能解决这个问题吗?

0 个答案:

没有答案