отключение текста в DataGridViewTextBoxColumn - PullRequest
0 голосов
/ 02 февраля 2012

Есть ли способ отключить нечисловые данные в столбце DataGridViewTextBox?

Поле в моей базе данных является плавающим, и я хочу, чтобы пользователь мог вводить только числовые значения.

Ответы [ 2 ]

0 голосов
/ 03 февраля 2012

Вы также можете попробовать прослушать событие TextChanged элемента управления редактирования столбца DataFridViewTextBox и запретить пользователю вводить недопустимые значения в текстовое поле.Пример:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        string _prevValue;
        int _selLength;
        int _selStart;
        private bool _ignoreTxtChange;

        public Form1()
        {
            DataGridView dataGridView = new DataGridView();
            dataGridView.Dock = DockStyle.Fill;
            Controls.Add(dataGridView);
            DataTable ds = new DataTable();
            ds.Columns.Add("FloatValue", typeof(float));
            dataGridView.DataSource = ds;
            dataGridView.EditingControlShowing += dataGridView_EditingControlShowing;
        }

        private void dataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            DataGridView dataGridView = (DataGridView)sender;
            TextBox textBox = e.Control as TextBox;
            if (textBox == null)
            {
                return;
            }
            textBox.TextChanged -= textBox_TextChanged;
            DataGridViewColumn floatColumn = dataGridView.Columns["FloatValue"];
            if (dataGridView.CurrentCell.ColumnIndex != floatColumn.Index)
            {
                return;
            }
            textBox.TextChanged += textBox_TextChanged;
            _prevValue = textBox.Text;
        }

        void textBox_TextChanged(object sender, EventArgs e)
        {
            if (_ignoreTxtChange)
            {
                return;
            }
            _ignoreTxtChange = true;
            TextBox textBox = (TextBox)sender;
            float value;
            if ((_prevValue == textBox.Text) || float.TryParse(textBox.Text, out value))
            {
                _prevValue = textBox.Text;
                _selLength = textBox.SelectionLength;
                _selStart = textBox.SelectionStart;
            }
            else
            {
                textBox.Text = _prevValue;
                textBox.Select((_selStart == 0) ? 0 : _selStart - 1, _selLength);
            }
            _ignoreTxtChange = false;
        }
    }
}
0 голосов
/ 02 февраля 2012

Я не сталкивался с этим лично, но знаю несколько способов. Вы можете определить свой собственный тип столбца, чтобы ограничить это, или вы можете обрабатывать события DataGridView.

Взгляните сюда: http://msdn.microsoft.com/en-us/library/wc5cbb9z.aspx

В частности: CellValidating и CellValueChanged

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