DataGridView回车换行
来源:互联网 发布:jenkins 配置mac节点 编辑:程序博客网 时间:2024/05/31 18:52
在DataGridView单元格中输入文本时,希望能够输入多行,但找了很多资料都没有找到方法,多行显示可以,但输入的时候要回车换行就做不到。后来找了个变通的办法:要换行,就输入个回车 ,弹出个对话框,在对话框里输入文本,然后确定,输入的内容,加到单元格中。麻烦点,但也是个办法吧,贴出来,如果有高人有更好的办法,望指教。
下面是带DataGridView的页面
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Text;
- using System.Windows.Forms;
- namespace DataGridViewEnterDemo
- {
- public partial class frm_YaoPin_In : Form
- {
- private DataTable m_table;
- private bool enterkey ;
- /// <summary>
- /// 获取数据源,这里不从数据库检索,只初始化一个 DataSet来作为数据源
- /// </summary>
- private void getDataSouse()
- {
- if (m_table == null)
- {
- m_table = new DataTable();
- m_table.Columns.Add("产品代号", Type.GetType("System.String"));
- m_table.Columns.Add("产品名称", Type.GetType("System.String"));
- m_table.Columns.Add("规格", Type.GetType("System.String"));
- m_table.Columns.Add("剂型", Type.GetType("System.String"));
- m_table.Columns.Add("批号", Type.GetType("System.String"));
- m_table.Columns.Add("包装规格", Type.GetType("System.String"));
- m_table.Columns.Add("单位", Type.GetType("System.String"));
- m_table.Columns.Add("数量", Type.GetType("System.Double"));
- m_table.Columns.Add("检验单号", Type.GetType("System.String"));
- m_table.Columns.Add("生产厂家", Type.GetType("System.String"));
- for (int i = 0; i < 10; i++)
- {
- DataRow dr = m_table.NewRow(); //添加新行
- dr["产品代号"] = "";
- dr["产品名称"] = "";
- dr["规格"] = "";
- dr["剂型"] = "";
- dr["批号"] = "";
- dr["包装规格"] = "";
- dr["单位"] = "";
- dr["数量"] = 0;
- dr["检验单号"] = "";
- dr["生产厂家"] = "";
- m_table.Rows.Add(dr);
- }
- }
- }
- public frm_YaoPin_In()
- {
- InitializeComponent();
- }
- private void YaoPin_In_Load(object sender, EventArgs e)
- {
- this.getDataSouse();
- this.dataGridView1.DataSource = m_table;
- this.dataGridView1.DefaultCellStyle.WrapMode = DataGridViewTriState.True; //设置为自动换行
- this.dataGridView1.Columns["产品代号"].Width = 80;
- this.dataGridView1.Columns["产品名称"].Width = 180;
- this.dataGridView1.Columns["规格"].Width = 60;
- this.dataGridView1.Columns["剂型"].Width = 55;
- this.dataGridView1.Columns["批号"].Width = 60;
- this.dataGridView1.Columns["包装规格"].Width = 60;
- this.dataGridView1.Columns["单位"].Width = 30;
- this.dataGridView1.Columns["数量"].Width = 60;
- this.dataGridView1.Columns["检验单号"].Width = 80;
- this.dataGridView1.Columns["生产厂家"].Width = 80;
- }
- protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
- {
- enterkey =false;
- if (keyData == Keys.Enter ) //监听回车事件
- {
- if (this.dataGridView1.IsCurrentCellInEditMode) //如果当前单元格处于编辑模式
- {
- enterkey = true; //把是否点击按钮设置为真
- if (this.dataGridView1.CurrentCell.ColumnIndex < this.dataGridView1.ColumnCount-1) //光标移动到右边列
- {
- this.dataGridView1.CurrentCell = this.dataGridView1[this.dataGridView1.CurrentCell.ColumnIndex + 1, this.dataGridView1.CurrentCell.RowIndex];
- }
- }
- }
- //继续原来base.ProcessCmdKey中的处理
- return base.ProcessCmdKey(ref msg, keyData);
- }
- private void dataGridView1_CellParsing(object sender, DataGridViewCellParsingEventArgs e)
- {
- if (enterkey) //判断是否按回车
- {
- DataGridView dgv = (DataGridView)sender;
- DataGridEnter select = new DataGridEnter(e); //把DataGridViewCellParsingEventArgs的参数传递进去,在打开对话框中修改e.Value。单元格的值
- select.ShowDialog(); //重新打开一个窗口用于输入文本。
- e.ParsingApplied = true;
- }
- }
- }
- }
文中主要用到两个事件,一个是重写窗体的ProcessCmdKey事件,来捕捉回车按钮,
一个是DataGridView的CellParing事件,当用户离开编辑模式。按回车和Tab会触发。
思路就是:在ProcessCmdKey中捕捉回车,把是否回车标示enterkey改为True。在CellParsing事件中打开窗体,改变单元格的值。
打开窗体的代码如下所示:
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Text;
- using System.Windows.Forms;
- namespace DataGridViewEnterDemo
- {
- public partial class DataGridEnter : Form
- {
- public DataGridEnter()
- {
- InitializeComponent();
- }
- private System.Windows.Forms.DataGridViewCellParsingEventArgs m_event;
- public DataGridEnter(System.Windows.Forms.DataGridViewCellParsingEventArgs e)
- {
- this.m_event = e;
- this.InitializeComponent();
- }
- private void btnOK_Click(object sender, EventArgs e)
- {
- this.m_event.Value = this.tbxdatagridcurrentvalue.Text;
- this.Close();
- }
- private void DataGridEnter_Load(object sender, EventArgs e)
- {
- this.tbxdatagridcurrentvalue.Text = this.m_event.Value.ToString();
- }
- }
- }
在其中加入一个可以输入多行的文本框,和一个按钮,把cellparing事件中的参数DataGridViewCellParsingEventArgs 传递进来,
在点击确定的时候改变DataGridViewCellParsingEventArgs 的值。达到改变输入单元格值得效果。
在开始解决这个问题的时候,我试图在事件 ProcessCmdKey中按回车后在当前单元格中加入"/r/n"来达到回车效果,但却怎么也不能取到当前单元格值,也不能设置当前单元格值,设置旁边的单元格都可以。想了很多办法都是失败。
后来又在dataGridView1_CellParsing事件中做,可以读取和改写单元格值,但又没有办法让焦点回到单元格中,后来还是失败。也不知道有没有好的解决方法!
- DataGridView回车换行
- 回车换行
- 回车 换行
- 回车换行
- 回车换行
- 回车换行
- 回车换行
- 回车 换行
- 回车,换行
- 回车 & 换行
- 回车 换行
- 回车 换行
- 换行 回车
- c# 实现datagridview 用回车向右移动,到头换行,支持编辑模式
- C# datagridview 实现单元格内容进行回车换行而不是换另一行数据
- datagridview回车事件
- DataGridView的回车事件
- 关于回车换行符
- 搜索引擎重复网页发现技术分析
- sql查询中尽量减少的使用
- Dreamweaver CS3 Spry 试应用 与Spry框架
- 表单的验证 Validator
- 开博第一篇
- DataGridView回车换行
- java网络编程-Ajax+servlet实例
- AJAX+servlet实例入门
- AJAX在servlet中返回中文乱码问题的解决
- 如何用java和access连接
- Java中Timer的使用
- java中Timer使用的简要说明
- 使用Java中的Timer和TimerTask
- java中Date的用法