Вы можете установить 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 = "";
}
//(...)
Я думаю, что нашел решение, которое удовлетворяет меня. Благодаря mmyers я понял, что должен был проверить формальную спецификацию синтаксиса для бросков типа.
Неоднозначность вызывается +
и -
будучи и унарными операторами и бинарными операторами. Java решает проблему этой грамматикой:
CastExpression:
( PrimitiveType Dimsopt ) UnaryExpression
( ReferenceType ) UnaryExpressionNotPlusMinus
(см. http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#238146),
Так, '+'
и '-'
явно сразу запрещены после ')'
из броска, если состав исполнителей не использует тип примитива - которые известны компилятором априорно.
Я просто проверил его, и этот код:
Double y = new Double(0.1);
System.out.println((Double)-y);
дает ошибку компиляции:
operator - cannot be applied to Double, java.lang.Double
.
Помещение круглых скобок вокруг-y заставляет его скомпилировать прекрасный. Таким образом, по-видимому, Java решает эту проблему, просто не позволяя его в грамматике (если это - правильная терминология; я не эксперт по компиляторам).