格式化UltragridRow单元格

时间:2013-06-11 10:41:03

标签: vb.net infragistics ultragrid

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

赞:使单元格格式化DateTime

我已经完成了一个专栏,

   UltraGridColumn.Format = "d"

同样可以选择格式化单个单元格吗?

UltraGridRow.Cells("abc")= ?

注意:使用Infragistics版本12.1

1 个答案:

答案 0 :(得分:4)

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

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

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

让我们试一个例子(这部分大部分取自Alhalama评论中提出的示例代码)

假设您有一个只有两列的DataTable: 第一列称为CONDITION并包含一个字符串。这个字符串是我的格式要求 第二列名为DATEINFO,其中包含的日期应根据“条件”列中的值进行不同的格式化。
因此,如果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;
       }
   }
}