DataGridView中如何获得当前单元格中选中的文本?

解决方案 »

  1.   

     DataGridView.CurrentRow.Cells["字段名"].Value;或CurrentCells
      

  2.   

    当前单元格处于编辑状态,
    然后从它的值中选中一部分,
    比如当前单元格的值是"abcdefg",
    然后进入编辑状态后,
    从里面选中"efg",
    怎么获得选中的值?
      

  3.   

    他有个row的方法.里面有个e属性.你可以自己找一下.好象是e.row[0][0].text吧.记不清了.大概是这个意思~
      

  4.   

    for( i=1;i<document.all.GridView.rows.length;i++)
    {
     alert(document.all.GridView.rows(i).cells(0).innerText);
    }
    看看行吗?js获取
      

  5.   

    以上获取的第一个格内的内容(cells(0))
      

  6.   

    这个问题貌似就很复杂了哦,因为DataGridViewTextBoxCell是没有selection changed事件的哟,而且也没有selection的属性的,所以你得重写datagrid控件= =#,貌似工作量有点大
      

  7.   

    但是有个简洁的方式那就是你用模板自定义datagridview列然后承载标准的textbox控件然后访问标准textbox控件可以得到里面值
    用this.textBox1.SelectedText可以获取选取属性using System;
    using System.Windows.Forms;public class CalendarColumn : DataGridViewColumn
    {
        public CalendarColumn() : base(new CalendarCell())
        {
        }    public override DataGridViewCell CellTemplate
        {
            get
            {
                return base.CellTemplate;
            }
            set
            {
                // Ensure that the cell used for the template is a CalendarCell.
                if (value != null && 
                    !value.GetType().IsAssignableFrom(typeof(CalendarCell)))
                {
                    throw new InvalidCastException("Must be a CalendarCell");
                }
                base.CellTemplate = value;
            }
        }
    }public class CalendarCell : DataGridViewTextBoxCell
    {    public CalendarCell()
            : base()
        {
            // Use the short date format.
            this.Style.Format = "d";
        }    public override void InitializeEditingControl(int rowIndex, object 
            initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
        {
            // Set the value of the editing control to the current cell value.
            base.InitializeEditingControl(rowIndex, initialFormattedValue, 
                dataGridViewCellStyle);
            CalendarEditingControl ctl = 
                DataGridView.EditingControl as CalendarEditingControl;
            ctl.Value = (DateTime)this.Value;
        }    public override Type EditType
        {
            get
            {
                // Return the type of the editing contol that CalendarCell uses.
                return typeof(CalendarEditingControl);
            }
        }    public override Type ValueType
        {
            get
            {
                // Return the type of the value that CalendarCell contains.
                return typeof(DateTime);
            }
        }    public override object DefaultNewRowValue
        {
            get
            {
                // Use the current date and time as the default value.
                return DateTime.Now;
            }
        }
    }class CalendarEditingControl : DateTimePicker, IDataGridViewEditingControl
    {
        DataGridView dataGridView;
        private bool valueChanged = false;
        int rowIndex;    public CalendarEditingControl()
        {
            this.Format = DateTimePickerFormat.Short;
        }    // Implements the IDataGridViewEditingControl.EditingControlFormattedValue 
        // property.
        public object EditingControlFormattedValue
        {
            get
            {
                return this.Value.ToShortDateString();
            }
            set
            {
                String newValue = value as String;
                if (newValue != null)
                {
                    this.Value = DateTime.Parse(newValue);
                }
            }
        }    // Implements the 
        // IDataGridViewEditingControl.GetEditingControlFormattedValue method.
        public object GetEditingControlFormattedValue(
            DataGridViewDataErrorContexts context)
        {
            return EditingControlFormattedValue;
        }    // Implements the 
        // IDataGridViewEditingControl.ApplyCellStyleToEditingControl method.
        public void ApplyCellStyleToEditingControl(
            DataGridViewCellStyle dataGridViewCellStyle)
        {
            this.Font = dataGridViewCellStyle.Font;
            this.CalendarForeColor = dataGridViewCellStyle.ForeColor;
            this.CalendarMonthBackground = dataGridViewCellStyle.BackColor;
        }    // Implements the IDataGridViewEditingControl.EditingControlRowIndex 
        // property.
        public int EditingControlRowIndex
        {
            get
            {
                return rowIndex;
            }
            set
            {
                rowIndex = value;
            }
        }    // Implements the IDataGridViewEditingControl.EditingControlWantsInputKey 
        // method.
        public bool EditingControlWantsInputKey(
            Keys key, bool dataGridViewWantsInputKey)
        {
            // Let the DateTimePicker handle the keys listed.
            switch (key & Keys.KeyCode)
            {
                case Keys.Left:
                case Keys.Up:
                case Keys.Down:
                case Keys.Right:
                case Keys.Home:
                case Keys.End:
                case Keys.PageDown:
                case Keys.PageUp:
                    return true;
                default:
                    return false;
            }
        }    // Implements the IDataGridViewEditingControl.PrepareEditingControlForEdit 
        // method.
        public void PrepareEditingControlForEdit(bool selectAll)
        {
            // No preparation needs to be done.
        }    // Implements the IDataGridViewEditingControl
        // .RepositionEditingControlOnValueChange property.
        public bool RepositionEditingControlOnValueChange
        {
            get
            {
                return false;
            }
        }    // Implements the IDataGridViewEditingControl
        // .EditingControlDataGridView property.
        public DataGridView EditingControlDataGridView
        {
            get
            {
                return dataGridView;
            }
            set
            {
                dataGridView = value;
            }
        }    // Implements the IDataGridViewEditingControl
        // .EditingControlValueChanged property.
        public bool EditingControlValueChanged
        {
            get
            {
                return valueChanged;
            }
            set
            {
                valueChanged = value;
            }
        }    // Implements the IDataGridViewEditingControl
        // .EditingPanelCursor property.
        public Cursor EditingPanelCursor
        {
            get
            {
                return base.Cursor;
            }
        }    protected override void OnValueChanged(EventArgs eventargs)
        {
            // Notify the DataGridView that the contents of the cell
            // have changed.
            valueChanged = true;
            this.EditingControlDataGridView.NotifyCurrentCellDirty(true);
            base.OnValueChanged(eventargs);
        }
    }public class Form1 : Form
    {
        private DataGridView dataGridView1 = new DataGridView();    [STAThreadAttribute()]
        public static void Main()
        {
            Application.Run(new Form1());
        }    public Form1()
        {
            this.dataGridView1.Dock = DockStyle.Fill;
            this.Controls.Add(this.dataGridView1);
            this.Load += new EventHandler(Form1_Load);
            this.Text = "DataGridView calendar column demo";
        }    private void Form1_Load(object sender, EventArgs e)
        {
            CalendarColumn col = new CalendarColumn();
            this.dataGridView1.Columns.Add(col);
            this.dataGridView1.RowCount = 5;
            foreach (DataGridViewRow row in this.dataGridView1.Rows)
            {
                row.Cells[0].Value = DateTime.Now;
            }
        }
    }
      

  8.   

    选中efg后直接Ctrl+C不就行了,或者 右键-复制
    如果没有在编辑状态下Ctrl+C的内容随着SelectMode不同而变化,有的是整个单元格的有的整行的。
      

  9.   

    哭啊,我知道Ctrl+C,Ctrl+V也可以用,但我想用编程的方式实现啊
    那怎么模拟Ctrl+C,Ctrl+V的事件?---------------------------------
    首先要谢谢atlasroben,但我已经重写了三个模板了,快疯了,可不可以不重写啊……