【问题标题】:Format UltragridRow Cells格式化 UltragridRow 单元格
【发布时间】:2013-06-11 10:41:03
【问题描述】:

我需要格式化UltraGrid 的单元格。

Like:使单元格格式化为DateTime

我已经完成了一个专栏,

   UltraGridColumn.Format = "d"

同样有任何选项来格式化单个单元格吗?

UltraGridRow.Cells("abc")= ?

注意:使用 Infragistics 12.1 版

【问题讨论】:

  • 你用的是什么版本?
  • 您能解释一下为什么需要将单个单元格的格式与整个列不同吗?
  • No steve 我从网格中选择特定行并在另一个网格中显示详细信息。由于网格有两列,例如名称和值,我必须为单个单元格执行此操作。值部分现在包含 DateTime 并且我必须对其进行格式化,并且其他单元格具有不同的值。你能得到我吗?
  • @Steve:我们可以格式化吗?有什么选择吗?
  • 我不确定,但每个单元格都有一个名为 Editor 的属性,表示用于处理单元格值的嵌入式控件。此 Editor 属性具有 DateFilter 属性,您可以使用它来格式化从数据源到编辑器的值,反之亦然。可能这是要遵循的方法,但正如我所说,我不确定您是否可以获得所需的结果

标签: vb.net infragistics ultrawingrid


【解决方案1】:

强制 UltraGrid 对同一列中的单元格使用不同编辑器的技巧是基于控件基础结构提供的一组编程对象和模式。

首先要考虑的是InitializeRow事件。当您设置网格的初始 DataSource 或更改基础 DataSource 中的某些内容时,将为每一行调用此事件。借助e.Reinitialize 标志,您可以区分这两种情况。如果为假,则将整个数据源应用于网格,如果为真,则通常仅重新初始化行的子集,因为用户已编辑单元格或代码已更改数据源中的值。

要考虑的第二件事是每个 UltraGridCell 或 UltraGridColumn 中存在的 Editor 属性。它是一个由 UltraGrid 自动构建的对象,允许单元格编辑。 UltraGrid 代码根据列的数据类型设置此对象,显然,为列的每个单元格设置相同的编辑器。您可以在列级别(通常在 InitializeLayout 事件中)设置自己的编辑器,也可以逐个单元格地查看您的格式规则。

让我们尝试一个示例(其中大部分来自 Alhalama 在其 cmets 中建议的示例代码)

假设您有一个只有两列的 DataTable: 第一列称为CONDITION 并包含一个字符串。这个字符串是我的格式要求。
第二列称为DATEINFO,其中包含的日期应根据 CONDITION 列中的值采用不同的格式。
因此,如果CONDITION = 'TEST1' 则 DATEINFO 单元格格式为日/月/年模式,如果CONDITION='TEST2' 则 DATEINFO 单元格格式应为小时/分钟/秒。

private void ultraGrid1_InitializeRow(object sender, InitializeRowEventArgs e)
{
   if (e.ReInitialize == false)
   {
       DefaultEditorOwnerSettings editorSettings;
       DateTimeEditor datetime_editor;
       string condition = e.Row.GetCellValue("Condition").ToString();
       switch (condition)
       {
            case "TEST1":
                editorSettings = new DefaultEditorOwnerSettings()
                editorSettings.DataType = typeof(DateTime);
                editorSettings.MaskInput = "mm/dd/yyyy";
                datetime_editor = new DateTimeEditor(new DefaultEditorOwner(editorSettings));
                e.Row.Cells["DateInfo"].Editor = datetime_editor;
                break;
            case "TEST2":
                editorSettings = new DefaultEditorOwnerSettings()
                editorSettings.DataType = typeof(DateTime);
                editorSettings.MaskInput = "hh:mm:ss";
                datetime_editor = new DateTimeEditor(new DefaultEditorOwner(editorSettings));
                e.Row.Cells["DateInfo"].Editor = datetime_editor;
                break;
       }
   }
}

【讨论】:

  • 为什么不呢?是通用的,当然要构建的Editor类型要和底层数据类型一致(EditorWithText、ColorPickerEditor、FontNameEditor、EditorWithMask、EditorWithCombo、OptionSetEditor、CheckEditor)打开Alhalama链接的例子,搜索frmCellValueList.cs form/designer跨度>
  • No d 不是日期的有效格式表达式(或至少不能被 UltraGridCell 识别)
  • 这对我来说非常有效,谢谢! @Santhosh 我知道已经有一段时间了,但是您可以使用 EditorWithText 来表示货币和十进制值(而不是 DateTimeEditor)。
猜你喜欢
  • 2010-10-20
  • 2016-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-28
  • 1970-01-01
  • 2011-08-16
相关资源
最近更新 更多