我的应用程序的最终用户在验证我所获得的网格时遇到了一些问题。
其中一个问题是其中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。
我正在使用的代码有什么问题?
第三个也是最后一个问题不是最重要的问题,但是当单击单元格时,单元格中的文本不会自动突出显示,因此用户必须删除每个字符才能清除单元格。
如何在单击单元格时自动选择单元格中的文本?
答案 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的建议。