Сделать первый символ в верхнем регистре строки в Win Form DataGridView C # .NET - PullRequest
0 голосов
/ 02 мая 2018

Итак, у меня есть представление сетки данных в моем приложении C # Win Form, ячейки доступны для редактирования по умолчанию, теперь я хочу, чтобы всякий раз, когда что-то печаталось в этих ячейках, конечное значение обрабатывалось как Upper Case First, то есть любые типы пользователей:

*string => String
example => Example
another => Another
chaRactEr => ChaRactEr*

Я могу сделать это в своем коде в событии Cell Value Changed, но когда я делаю это в событии Cell Value Changed и устанавливаю значение этой ячейки как отформатированную строку (что требуется от конечного пользователя) для события срабатывает дважды. Я не могу допустить, чтобы это произошло, поскольку в этом событии запускается функция базы данных. Я пытался захватить значение ячейки в другом событии, например, в Cell Leave, Cell Enter и других событиях, но никогда не могу его зафиксировать.

Так что мне нужно знать, есть ли какое-либо свойство или характеристика представления сетки данных в C # .NET, которая сделала бы первый символ значения в верхнем регистре? Любое альтернативное предложение к этому также было бы действительно полезно.

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

DataGridView имеет событие CellFormatting. Вы можете пойти на что-то вроде этого:

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
    {
        if (e.Value != null)
        {
            string str = (string)e.Value;
            str = char.ToUpper(str[0]) + str.Substring(1);
            e.Value = str;
        }
    }
0 голосов
/ 03 мая 2018

Я могу только догадываться, что вы, возможно, пренебрегаете тем, что когда код «изменяет» значение в «ячейке», вызвавшей событие CellValueChanged, очевидно, будет «запускать» событие CellValueChanged снова, когда его значение изменяется на есть заглавная строка!

Чтобы избежать этой циклической ссылки, просто выключите событие (перед тем, как изменить значение ячеек), измените значение ячеек… событие не сработает… затем снова включите событие «включено» после изменения значения.

Пример; Ниже проверяет, находится ли измененная ячейка в столбце 0, изменяет строку в ячейке, чтобы сделать первый символ заглавным. Код использует текстовое поле в форме, которое будет содержать текст, указывающий, когда происходит событие CellValueChanged. Если код выполняется с закомментированным кодом после публикации, текстовое поле будет содержать две (2) записи каждый раз, когда изменяется значение ячейки в первом столбце. Без комментариев две строки кода покажет, что запись в текстовом поле будет иметь только одну (1) запись. Сэндвич строки кода, которая «изменяет» значение ячеек между строкой кода, которая выключает событие, и строкой кода, которая снова включает его. Надеюсь, что это имеет смысл.

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) {
  if (e.RowIndex >= 0 && e.ColumnIndex >= 0) {
    if (e.ColumnIndex == 0 && dataGridView1.Rows[e.RowIndex].Cells[0].Value != null) {
      string currentData = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();
      string newData = char.ToUpper(currentData[0]) + currentData.Substring(1);
      //dataGridView1.CellValueChanged -= new DataGridViewCellEventHandler(dataGridView1_CellValueChanged);
      dataGridView1.Rows[e.RowIndex].Cells[0].Value = newData;
      //dataGridView1.CellValueChanged += new DataGridViewCellEventHandler(dataGridView1_CellValueChanged);
      textBox3.Text += "CellValueChanged fired!" + Environment.NewLine;
    }
  }
}
0 голосов
/ 02 мая 2018

Вы можете использовать этот код:

        bool bchange = false;
        private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if (bchange == false)
            {
                bchange = true;
                String oritext = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
                String newtext= oritext.First().ToString().ToUpper() + oritext.Substring (1);
                //Update Database

                //Update cell
                dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = newtext;

            }
            else 
            {
                bchange = false; 
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...