Консультация № 197550
09.01.2020, 09:44
0.00 руб.
0 1 1
Здравствуйте! У меня возникли сложности с таким вопросом:
При нажатие кнопки, datagridview заполняется массивом, где размер задается в textbox и значения случайные числа. И когда запускаю через обычную отладку(f5) , то таблица заполняется только одним числом, хотя должно разными. При пошаговом (f11) заполняется нормально. Помогите пожалуйста решить данный вопрос

Приложение:
private void button1_Click(object sender, EventArgs e)
{
int s = Convert.ToInt32(textBox1.Text);
int a = Convert.ToInt32(textBox2.Text);

dataGridView1.RowCount = s;
dataGridView1.ColumnCount = a;

var arr = new int[s, a];

for (int i = 0; i < s; i++)
{
for (int j = 0; j < a; j++)
{

Random rnd = new Random();

arr[i,j]= rnd.Next(100);
dataGridView1.Rows[i].Cells[j].Value = arr[i, j];



}

}
}

Обсуждение

давно
Советник
400484
472
09.01.2020, 10:23
общий
10.01.2020, 20:53
это ответ
Здравствуйте, gena.sorbuchev!
Проблема в том, что у вас не происходит обновления формы при внесение значений в dataGridView1. Когда вы нажимаете F5, то форма обновляется при первом внесении данных и потом все внесенные данные не обновляют форму. Попробуйте потерять фокус у формы и вернуть его (Например, скрыть и отобразить).
Код:

// Плохой пример
dataGridView1.Visibility = Visibility.Collapsed;
dataGridView1.Visibility = Visibility.Visible;

При нажатии F11 программа теряет фокус, т.к. вы переходите в VisualStudio и обратно в программу. Поэтому у вас отображаются все значения получаемые dataGridView1.
Вам нужно сделать привязку данных к dataGridView1.
Код:

// добавления данных к dataGridView1
dataGridView1.DataContext = list;
...

// если используется xaml
<DataGridView Name="dataGridView1" ItemsSource="{Binding}" />

// свойство хранящие данные
List<int> list
{
get => list;
set
{
list = value;
OnPropertyChanged("list");
}
}

public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

Подробнее можете почитать тут или здесь.

Мой совет. Используйте Binding для заполнения dataGridView1. В противном случаи вам придется как-то заставлять перерисовывать dataGridView1 после добавления значений.
5
Форма ответа