Быстрое исправление
EditingControl
использует FormattedValue
ячейки для редактирования.
В качестве быстрого исправления, в обработчике EditingControlShowing
установите Value
CurrentCell
как Text
из TextBox
:
private void DataGridView1_EditingControlShowing(object sender,
DataGridViewEditingControlShowingEventArgs e)
{
if (dataGridView1.CurrentCell.ColumnIndex == 4)
{
var txt = (TextBox)e.Control;
txt.Text = $"{dataGridView1.CurrentCell.Value}";
txt.UseSystemPasswordChar = true;
}
}
Лучший вариант - Создать DataGridViewPasswordColumn
В качестве лучшего варианта создайте DataGridViewPasswordColumn
, который обрабатывает логику для вас:
public class DataGridViewPasswordColumn : DataGridViewTextBoxColumn
{
public DataGridViewPasswordColumn()
{
this.CellTemplate = new DataGriViewPasswordCell();
}
}
public class DataGriViewPasswordCell : DataGridViewTextBoxCell
{
public override void InitializeEditingControl(int rowIndex,
object initialFormattedValue,
DataGridViewCellStyle dataGridViewCellStyle)
{
base.InitializeEditingControl(rowIndex,
initialFormattedValue, dataGridViewCellStyle);
((TextBox)this.DataGridView.EditingControl).UseSystemPasswordChar = true;
}
protected override void Paint(Graphics graphics,
Rectangle clipBounds, Rectangle cellBounds,
int rowIndex, DataGridViewElementStates cellState,
object value, object formattedValue,
string errorText, DataGridViewCellStyle cellStyle,
DataGridViewAdvancedBorderStyle advancedBorderStyle,
DataGridViewPaintParts paintParts)
{
var i = $"{formattedValue}".Length;
formattedValue = new string('●', i);
base.Paint(graphics, clipBounds, cellBounds, rowIndex,
cellState, value, formattedValue,
errorText, cellStyle, advancedBorderStyle, paintParts);
}
}