Как компилятор Java анализирует преобразования типа?

Вы можете установить DataGridView.DataSource на null перед установкой нового.
Это приведет к тому, что DataGridView обновит свое содержимое новыми данными в источнике List:
базовый DataGridViewDataConnection сбрасывается только тогда, когда [117 ] ссылка отличается от текущей или имеет значение null.

Обратите внимание, что при сбросе DataSource событие RowsRemoved вызывается несколько раз (по одному разу для каждой удаляемой строки).

Я предлагаю изменить List на BindingList , потому что любое изменение в Списке будет отражено автоматически и потому что оно позволит удалять строки из DataGridView, если / когда это потребуется: использование List в качестве источника данных не позволит удалить строку.

BindingList InputData = new BindingList();

Вы всегда можете установить свойства AllowUserToDeleteRows и AllowUserToAddRows в false, если вы не хотите, чтобы ваши пользователи вмешивались в содержимое сетки.

Например:

public class Inputs
{
    public string Name { get; set; }
    public string Value { get; set; }
}

internal BindingList InputData = new BindingList();

private void Form1_Load(object sender, EventArgs e)
{
    dataGridView1.DataSource = InputData;
}

private void btnAddInput_Click(object sender, EventArgs e)
{
    string textValue = txtInput.Text.Trim();
    if (!string.IsNullOrEmpty(textValue))
    {
        InputData.Add(new Inputs() {
            Name = textValue,
            Value = "[Whatever this is]"
        });
        txtInput.Text = "";
    }
    else
    {
        MessageBox.Show("Not a valid value");
    }
}

Если вы хотите продолжать использовать List, добавьте код, необходимый для сброса DataGridView.DataSource:

private void btnAddInput_Click(object sender, EventArgs e)
{
    if (!string.IsNullOrEmpty(textValue))
    {
        //(...)
        dataGridView1.DataSource = null;
        dataGridView1.DataSource = InputData;
        txtInput.Text = "";
    }
    //(...)

11
задан Avi 30 December 2008 в 17:21
поделиться

2 ответа

Я думаю, что нашел решение, которое удовлетворяет меня. Благодаря mmyers я понял, что должен был проверить формальную спецификацию синтаксиса для бросков типа.

Неоднозначность вызывается + и - будучи и унарными операторами и бинарными операторами. Java решает проблему этой грамматикой:

CastExpression:
        ( PrimitiveType Dimsopt ) UnaryExpression
        ( ReferenceType ) UnaryExpressionNotPlusMinus

(см. http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#238146),

Так, '+' и '-' явно сразу запрещены после ')' из броска, если состав исполнителей не использует тип примитива - которые известны компилятором априорно.

8
ответ дан 3 December 2019 в 10:05
поделиться

Я просто проверил его, и этот код:

Double y = new Double(0.1);
System.out.println((Double)-y);

дает ошибку компиляции:

operator - cannot be applied to Double, java.lang.Double.

Помещение круглых скобок вокруг-y заставляет его скомпилировать прекрасный. Таким образом, по-видимому, Java решает эту проблему, просто не позволяя его в грамматике (если это - правильная терминология; я не эксперт по компиляторам).

2
ответ дан 3 December 2019 в 10:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: