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