2

我有一个自定义 DataGridView 控件,并希望在设计器(CellStyle 构建器)中设置自定义列的文本格式。

假设我想将文本格式设为大写。在搜索了这个之后,我找到了一些添加新事件然后更改文本格式的解决方案,但这不是我想要的。我想向所有设计的列添加一个新属性,并在那里设置或更改文本格式。

这该怎么做?

谢谢和最好的问候。

4

3 回答 3

9

恐怕没有标准的属性来格式化你想要的文本。

如果您真的不想使用各种 DGV 事件来进行文本格式化,您始终可以创建自己的 DGV 组件来执行您想要的操作,并使用这些组件来代替标准 DGV 组件。 MSDN 上的这篇文章应该可以帮助您入门。

编辑

这是一个自称 HanSolo的博客条目,它可以满足您的需求。

这是代码:

public class DataGridViewUpperCaseTextBoxColumn : DataGridViewTextBoxColumn { 
    public DataGridViewUpperCaseTextBoxColumn() : base() { 
        CellTemplate = new DataGridViewUpperCaseTextBoxCell(); 
    } 
}

public class DataGridViewUpperCaseTextBoxCell : DataGridViewTextBoxCell { 
    public DataGridViewUpperCaseTextBoxCell() : base() { } 
    public override Type EditType { 
        get { 
            return typeof(DataGridViewUpperCaseTextBoxEditingControl); 
        } 
    } 
}

public class DataGridViewUpperCaseTextBoxEditingControl : DataGridViewTextBoxEditingControl { 
    public DataGridViewUpperCaseTextBoxEditingControl() : base() { 
        this.CharacterCasing = CharacterCasing.Upper; 
    } 
}

将此代码包含在您的项目中。完成此操作后,您将能够向 DataGridViewUpperCaseTextBoxColumn 类型的 DataGridView 添加一个新的 DataGridViewColumn。这个新的 DataGridViewColumn 将在列的 TextBox 组件中输入的所有文本大写。

您还应该重新考虑不使用事件的决定。这很容易做到。例如,如果您有一个名为 dataGridView1 的 DGV,您可以像这样使用 CellFormatting 事件:

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
     // Check the value of the e.ColumnIndex property if you want to apply this formatting only so some rcolumns.
     if (e.Value != null) {
         e.Value = e.Value.ToString().ToUpper();
         e.FormattingApplied = true;
     }
}
于 2010-01-04T20:16:37.960 回答
8

编辑大写单元格的简单方法是在 DataGridView 中添加“EditingControlShowing”事件。

在这种情况下,您可以在带有 DataGridViewEditingControlShowingEventArgs 参数的控件中设置“CharacterCasing”属性。

此控件基于文本框,因此您可以像文本框一样工作!

如果列的类型与 DataGridViewTextBoxColumn 不同,则控件的基础可能具有属性“CharacterCasing”。

我希望,我对你有帮助。

伊塔洛

于 2010-04-06T13:30:48.613 回答
0

在 DataGridView EditingControlShowing "Event" 中使用这个简单的方法

Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
    If TypeOf e.Control Is TextBox Then
        DirectCast(e.Control, TextBox).CharacterCasing = CharacterCasing.Upper
    End If
End Sub
于 2016-01-25T12:13:57.090 回答