在Win Form DataGridView C#.NET

时间:2018-05-02 07:04:46

标签: c# .net datagridview

所以,我在C#Win Form应用程序中有一个数据网格视图,默认情况下单元格是可编辑的,现在我想要在这些单元格中输入某些内容时,应将最终值视为大写优先,这意味着如果任何用户类型:

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

我可以在Cell Value Changed事件的代码中执行此操作,但是当我在Cell Value Changed事件中执行此操作并将该单元格的值设置为格式化字符串(最终用户需要)时,事件被触发两次。我不能让这件事发生,因为在这个事件中有一个数据库功能触发。 我曾尝试在Cell Leave,Cell Enter和其他事件等其他事件中捕获单元格值,但我永远无法捕获它。

所以我需要知道,如果在C#.NET中存在数据网格视图的任何属性或特性,它会使值的第一个字符为大写? 对此的任何替代建议也将非常有用。

3 个答案:

答案 0 :(得分:1)

您可以使用此代码:

        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; 
            }
        }

答案 1 :(得分:0)

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;
        }
    }

答案 2 :(得分:0)

我只能猜测你可能忽略了当代码“改变”调用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;
    }
  }
}