【问题标题】:C# trim datagridview cell stringC#修剪datagridview单元格字符串
【发布时间】:2017-05-03 16:23:45
【问题描述】:

我需要修剪 textbox2_KeyPress 事件中的 datagridview 单元格,以便它在 textbox2 中的 datagrid 中找到匹配值之前按键在 datagrid 中搜索 textbox2 的字符串。

目前 CellFormatting 事件发生在 KeyPress 查找值之后。

我的代码;

private void textBox2_KeyPress(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                iCBOMHDataGridView.DataSource = iCBOMHBindingSource;

                string input = textBox2.Text;
                string output = "";
                textBox2.Text = Regex.Replace(input, @"^\d{4}|[A-z]{2}[0-9]{5},|,|,|\d{|[0-9]{4}/....|\d{1,}\/\d{2,2}\/\d{4}|\s.........|\s|,|,|,|\d*?.$|[*?:/]\n|\r|\r\n", output);

                foreach (DataGridViewRow row in iCBOMHDataGridView.Rows)

                    if ((string)row.Cells["PARTNUMBER"].Value == textBox2.Text)

                    {
                        row.Selected = true;
                        MessageBox.Show("Part Number Found");
                    }
                    else
                    {
                        row.Selected = false;
                        MessageBox.Show("Part Number Not Found");
                    }
            }
        }

       private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (e.RowIndex > -1)
            {
               e.Value = e.Value.ToString().Trim();
            }
        }

【问题讨论】:

  • 尽管它们的名称不同,但它仍然有效。 CellFormatting 修剪 DataGrid 中的所有字符串。但是,当我需要它在正则表达式运行之后但在它找到匹配值之前执行它时,它会在 KeyPress 之后执行它
  • DataGrid 是只读的。因为它显示了构成 KIT 产品的各种子产品,用户将使用条形码扫描仪对其进行扫描。他们不会编辑单元格。我遇到的问题是包含扫描到 textbox2 的部件号的单元格中的字符串后面有空格,因此代码找不到匹配项,因为 textbox2 后面没有空格。
  • 啊,是的,我现在明白了!抱歉,对此是新的;)...在这种情况下,尽管我可以看到有匹配项,但我仍然遇到在数据网格中找不到匹配值的问题..

标签: c# datagridview datagrid


【解决方案1】:

也许您可以使用 KeyDown 而不是 KeyPress,就像之前发生的那样。不知道现在是否足够早。

编辑:甚至是 PreviewKeyDown 事件。

【讨论】:

  • 如何在 keydown 事件中使用单元格格式化事件?我曾想过这个想法,但不确定如何有效实施
  • 我可能完全误解了按键和数据网格之间的关系。听起来他们实际上是分开的?我可能没有足够的信息来提出解决方案。如果空格是唯一的问题,那么为什么不在比较之前修剪字符串。
  • 我已经纠正了这个错误,现在它正在使用一个 DataGrid。我已将 regex.replace 部分移至 textbox2_PreviewKeyDown 事件。修剪位于 iCBOMHDataGridView_CellFormatting 中,比较 DataGrid 单元格以查找来自 textbox2 的匹配字符串位于 textbox2_KeyPress 事件中。
  • 但是,它仍然无法在 DataGrid 中找到零件号。我可以确认 textBox2 确实包含 DataGrid 中显示的正确部件号。
  • 您是否在调试器中查看过您要比较的实际值?你确定问题实际上是什么?据我了解,数据网格中的单元格格式在按键事件之前很久就发生了,所以我不确定它们是否相关。但毕竟,为什么不在关键事件中在比较它们的地方修剪字符串呢?
猜你喜欢
  • 2015-08-09
  • 1970-01-01
  • 2018-01-03
  • 1970-01-01
  • 1970-01-01
  • 2014-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多