Как установить формат текста столбцов DataGridView в верхний регистр, добавив новое свойство?

У меня есть настраиваемый элемент управления DataGridView, и я хочу установить текстовый формат для настраиваемых столбцов в конструкторе (построитель CellStyle).

Допустим, я хочу сделать текст в верхнем регистре. После поиска по этому поводу я нашел несколько решений с добавлением новых событий и последующим изменением формата текста, но это не то, что я хочу. Я хочу добавить новое свойство ко всем разработанным столбцам и установить или изменить текстовый формат.

Как это сделать?

Спасибо и с наилучшими пожеланиями.


person Jooj    schedule 04.01.2010    source источник


Ответы (3)


Боюсь, что нет стандартного свойства для форматирования текста так, как вы хотите.

Если вы действительно не хотите использовать различные события 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; 
    } 
}

Включите этот код в свой проект. Как только вы это сделаете, вы сможете добавить новый DataGridViewColumn в свой DataGridView типа DataGridViewUpperCaseTextBoxColumn. Этот новый DataGridViewColumn переводит в верхний регистр весь текст, введенный в компоненте TextBox столбца.

Вам также следует пересмотреть свое решение не использовать события. Это довольно легко сделать. Например, если у вас есть DGV с именем dataGridView1, вы можете использовать событие 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;
     }
}
person Jay Riggs    schedule 04.01.2010
comment
Спасибо, Джей, но у тебя есть конкретный ответ? Я считаю, что это всего лишь короткий фрагмент кода, но как добавить именно это свойство? - person Jooj; 05.01.2010

Самый простой способ редактировать ячейки в верхнем регистре — добавить событие EditingControlShowing в ваш DataGridView.

В этом случае вы можете установить свойство «CharacterCasing» в элементе управления, который поставляется с параметром DataGridViewEditingControlShowingEventArgs.

Этот элемент управления основан на текстовом поле, поэтому вы можете работать как текстовое поле!

Если тип столбца отличается от DataGridViewTextBoxColumn, база элемента управления, вероятно, имеет свойство 'CharacterCasing'.

Надеюсь, я вам помог.

итало

person Italo    schedule 06.04.2010
comment
private void DataGrid_EditingControlShowing (отправитель объекта, DataGridViewEditingControlShowingEventArgs e) { if (DataGrid.CurrentCell.ColumnIndex == 2) { TextBox prodCode = e.Control as TextBox; prodCode.CharacterCasing = CharacterCasing.Upper; } } - person ; 18.02.2013
comment
или private void dgv_EditingControlShowing(отправитель объекта, DataGridViewEditingControlShowingEventArgs e) { if (dgv.EditingControl.GetType() == typeof(DataGridViewTextBoxEditingControl)) { ((DataGridViewTextBoxEditingControl)dgv.EditingControl).CharacterCasing = CharacterCasing.Upper; } } - person mohnston; 07.06.2013

Используйте этот простой метод в 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
person Santosh    schedule 25.01.2016