UltraGrid验证问题

时间:2017-06-27 11:42:11

标签: vb.net validation date decimal infragistics

我的应用程序的最终用户在验证我所获得的网格时遇到了一些问题。

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

网格是否有任何理由不允许选择当前日期而不先选择不同的日期?

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

e.Layout.Bands(0).Columns("currentRate").MaskInput = "{double:9.2}"
e.Layout.Bands(0).Columns("newRate").MaskInput = "{double:9.2}"

然而,当单击这些列中的任何一列时,单元格将显示字符串{double:9.2}(无法删除),然后单击单元格而不输入值将只显示一个空单元格。单元格也只允许单个数字和小数位,而不是2个DP。

我正在使用的代码有什么问题?

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

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

2 个答案:

答案 0 :(得分:1)

您可以轻松修复上一期。为此,请获取用户单击的单元格的编辑器,并调用编辑器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();
}

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

答案 1 :(得分:0)

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

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,因此我不得不使用Is语句来解决Else。但这可以解决问题,或者C#用户使用@ wnvko的建议。