-
Нашла у мелкомягких связку "датагрид - аррайлист". Но они добавляют данные в аррайлист в обработчике события загрузки формы, а мне надо добавлять по нажатию на кнопку. Если в обработчике загрузки формы ничего не добавить в аррайлист, то при позднем добавлении данные не отображаются - строки остаются просто пустыми. В чем секрет?
Вот код приложения:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
namespace ArrayList_DataGridView
{
public partial class Form1 : Form
{
private ArrayList ArrGuitar;
private CurrencyManager curMan;
private bool IsRefresh = false;
public Form1()
{
InitializeComponent();
ArrGuitar = new ArrayList();
ArrGuitar.Add(new Guitar(0, "", ""));
curMan = (CurrencyManager)dataGridView1.BindingContext[ArrGuitar];
dataGridView1.AutoGenerateColumns = false;
dataGridView1.DataSource = ArrGuitar;
colID.DataPropertyName = "ID";
colName.DataPropertyName = "Name";
colJahr.DataPropertyName = "Jahr";
curMan.Refresh();
}
private void button1_Click(object sender, EventArgs e)
{
IsRefresh = true;
this.Refresh();
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
if (IsRefresh)
{
if ((ArrGuitar[0] as Guitar).ID == 0) ArrGuitar.RemoveAt(0);
ArrGuitar.Add(new Guitar(1, "Hayneken", "1967"));
ArrGuitar.Add(new Guitar(2, "Godzilla", "1962"));
ArrGuitar.Add(new Guitar(3, "Crimona", "1977"));
curMan = (CurrencyManager)dataGridView1.BindingContext[ArrGuitar];
curMan.EndCurrentEdit();
curMan.Refresh();
IsRefresh = false;
}
}
}
}
чтобы попробовать закоментируйте строки:ArrGuitar.Add(new Guitar(0, "", ""));
if ((ArrGuitar[0] as Guitar).ID == 0) ArrGuitar.RemoveAt(0); -
Попробовала связывать только после добавления данных. Вроде работает. Т.е. "заранее" связывать нельзя?
-
DiamondShark © (17.01.07 11:26) [2]
> В чем секрет?
А откуда связанный контрол узнает, что в ArrayList чего-то добавили?
ArrayList об этом не сообщает.
Выход:
Либо связывать после добавления данных, либо использовать в качестве источника данных наследника (или обёртку), реализующего IBindingList. -
Спасибо. Пойдк читать умные книги...