Как разрешить нулевое значение при привязке к числовому полю в таблице данных? - PullRequest
2 голосов
/ 10 марта 2011

У меня есть приложение winforms с числовым полем на форме.Это начинается с нуля, затем, если я установлю его на номер, поменяю фокус, затем снова сниму флажок, текстовое поле вернется к ранее введенному числу.Если я изменю номер, например.с 4 до 5 обновляется корректно, но я хочу, чтобы пользователь мог очистить введенное.

Вот пример кода, демонстрирующий это поведение:

public partial class Form1 : Form
{
    DataTable table = new DataTable("TableName");
    public Form1()
    {
        DataColumn column = new DataColumn("NumericColumnName", typeof(Double));
        column.AllowDBNull = true;
        table.Columns.Add(column);
        object[] rowData = new object[1];
        rowData[0] = DBNull.Value;
        table.Rows.Add(rowData);

        InitializeComponent();

        BindingSource bindingSource = new BindingSource();
        bindingSource.DataSource = table;
        Binding binding = new Binding("Text", bindingSource, "NumericColumnName");
        textBox1.DataBindings.Add(binding);
    }
}

Этов совершенно новом проекте форм .net 3.5 в Visual Studio 2008. Я добавил в форму два текстовых поля.

Мое реальное приложение генерирует набор данных по-разному, но ведет себя одинаково.Делайте привязки к числовым столбцам таблицы данных, допускают пустые значения.

Ответы [ 2 ]

7 голосов
/ 13 января 2012

На самом деле Вы можете разрешить значения NULL, однако Вы должны добавить дополнительный анализ в код:

binding.Parse += new ConvertEventHandler(ParseNumeric);

, где ParseNumeric имеет следующую форму:

private void ParseNumeric(object sender, ConvertEventArgs e)
{
    if(e.Value.Equals(""))
        e.Value = DBNull.Value;
}

для меня этот код допускает пустые тексты в текстовых полях, которые затем представляются в базе данных значениями NULL.

4 голосов
/ 10 марта 2011

По умолчанию double - это необнуляемое поле.Таким образом, даже если вы введете значение NULL, оно изменится на 0.

Вам необходимо изменить тип данных столбца на double ?.удваивать?имеет тип обнуляемый .

ОБНОВЛЕНИЕ

При дальнейшем рассмотрении наборы данных с типом не поддерживают обнуляемые типы.

Решение состоит в том, чтобы использовать «свободный» тип (IE: объект), но затем вам нужно будет проверить его, чтобы убедиться в правильности ввода.

Я протестировал ваш образец и изменилэто к объекту позволило мне опустошить ящик.

...