我有一个自定义DataGridView控件,想要在设计器(CellStyle构建器)中设置自定义列的文本格式。
假设我想将文本格式设置为大写。在搜索了这个之后,我找到了一些添加新事件然后更改文本格式的解决方案,但这不是我想要的。我想为所有设计的列添加一个新属性,并设置或更改文本格式。
怎么做?
感谢和最好的问候。
答案 0 :(得分:9)
我担心没有标准属性可以根据需要格式化文本。
如果您真的不想使用各种DGV事件来进行文本格式化,您可以随时创建自己的DGV组件,并按照标准DGV组件使用它们。 This article on MSDN应该让你开始。
修改强>
这是来自自称为HanSolo的人的blog entry,可以满足您的需求。
以下是代码:
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;
}
}
在项目中包含此代码。完成后,您将能够将新的DataGridViewColumn添加到DataGridViewUpperCaseTextBoxColumn类型的DataGridView中。这个新的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;
}
}
答案 1 :(得分:7)
以大写形式编辑单元格的简单方法是在DataGridView中添加“EditingControlShowing”事件。
在这种情况下,您可以在随DataGridViewEditingControlShowingEventArgs参数提供的控件中设置'CharacterCasing'属性。
此控件基于文本框,因此您可以像TextBox一样工作!
如果列的类型与DataGridViewTextBoxColumn不同,则控件的基础可能具有“CharacterCasing”属性。
我希望,我帮助过你。
伊塔洛
答案 2 :(得分: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