Vb.net 超级网格验证问题

Vb.net 超级网格验证问题,vb.net,validation,date,decimal,infragistics,Vb.net,Validation,Date,Decimal,Infragistics,我已经向我的应用程序的最终用户提出了一些问题,这些问题涉及到我所得到的网格的验证 其中一个问题是其中两列是日期列,因此单元格中包含允许输入数据的日期选择器。但是,无论出于何种原因,用户都无法在这些单元格中选择当前日期。 如果他们先选择上一个/未来的日期,那么他们可以将其更改为当前日期,但这当然不是最有效的方法 为什么网格不允许在不先选择其他日期的情况下选择当前日期 其次,十进制列没有正确验证。我正在使用以下代码设置InitializeLayout方法中某些列的MaskInput属性 e.Layo

我已经向我的应用程序的最终用户提出了一些问题,这些问题涉及到我所得到的网格的验证

其中一个问题是其中两列是日期列,因此单元格中包含允许输入数据的日期选择器。但是,无论出于何种原因,用户都无法在这些单元格中选择当前日期。 如果他们先选择上一个/未来的日期,那么他们可以将其更改为当前日期,但这当然不是最有效的方法

为什么网格不允许在不先选择其他日期的情况下选择当前日期

其次,十进制列没有正确验证。我正在使用以下代码设置InitializeLayout方法中某些列的MaskInput属性

e.Layout.Bands(0).Columns("currentRate").MaskInput = "{double:9.2}"
e.Layout.Bands(0).Columns("newRate").MaskInput = "{double:9.2}"
但是,当单击这些列中的任何一列时,单元格将显示无法删除的字符串{double:9.2},然后当单击单元格而不输入值时,将只显示一个空单元格。该单元格也只允许一个位数和一个小数位,而不是两个DP

我使用的代码有什么问题

第三个也是最后一个问题并不是最重要的,但是当点击单元格时,单元格中的文本不会自动高亮显示,因此用户必须删除每个字符才能清除单元格


如何使其在单击单元格时自动选择单元格中的文本?

您可以轻松解决上一个问题。为此,获取用户单击的单元格编辑器,并调用编辑器SelectAll方法,如下所示:

private void UltraGrid_AfterEnterEditMode(object sender, EventArgs e)
{
    var grid = sender as UltraGrid;
    if(grid == null)
        return;

    var activeCell = grid.ActiveCell;
    if(activeCell == null)
        return;

    var editor = activeCell.EditorResolved;
    if(editor == null)
        return;

    editor.SelectAll();
}

关于前两个问题,这不是网格的默认行为。如果您没有告诉网格,它不会阻止您从日历下拉列表中选择任何日期,并且它会根据提供的掩码显示数字。因此,我建议您检查您的代码,看看您是否正在处理任何迫使网格以这种方式运行的事件。

我解决文本选择问题的方法是执行以下操作:

Private Sub ugProducts_AfterEnterEditMode(sender As Object, e As EventArgs) Handles ugProducts.AfterEnterEditMode

    Dim activeCell As UltraGridCell = ugProducts.ActiveCell
    Dim editor = activeCell.EditorResolved
    If editor IsNot Nothing Then
        If TypeOf editor Is CheckEditor AndAlso TypeOf editor Is EditorWithCombo Then
        Else
            editor.SelectionStart = 0
            editor.SelectionLength = activeCell.Text.Length
        End If
    End If

End Sub

出于某种原因,它不允许使用IsNot,因此我不得不用Else语句来满足Is。但是这会起作用,或者对于C用户,使用@wnvko的建议。

我实际上使用了不同的方法来选择网格中的文本,但是感谢你的想法,我使用的是vb,而不是C。你知道是什么导致了其他问题吗?什么样的代码可能会覆盖它?