У меня есть таблица данных, которую я программно связал с dataGridview1
public Form1()
{
InitializeComponent();
dataTable = new DataTable();
dataTable.Columns.Add("name");
this.dataGridView1.DataSource = dataTable;
Затем в каком-то обработчике событий я добавляю новую строку в dataTable и обновляю, что не работает: grid остается пустым!
DataRow dataRow = dataTable.NewRow();
dataRow["name"] = "John";
dataGridView1.Refresh();
Я читаю здесь http://objectmix.com/dotnet/92001-datagridview-doesnt-refresh.html, чтобы использовать RaiseListChangedEvents, но не вижу, как, поскольку у меня нет источника привязки, насколько я вижу.
Обязан ли я использовать другой элемент управленияBindingSource только для того, чтобы сделать эту довольно базовую функциональность?Какая польза от метода Refresh для GridView?
Примечание: я могу добавить в простой список без проблем.
Обновление: для контекста я захватываю текст в буфер обмена (эта часть работает, так что нет проблем) и просто положить его в сетку.Я попробовал метод invoke, как предложено, но он все еще не работает:
public partial class Form1 : Form
{
public delegate void DelRefresh();
private ClipboardSpy cps;
private DataTable dataTable;
public override void Refresh()
{
dataGridView1.DataSource = dataTable;
}
public Main()
{
InitializeComponent();
cps = new ClipboardSpy(this);
cps.ClipboardChanged += new EventHandler(cps_ClipboardChanged);
dataTable = new DataTable();
dataTable.Columns.Add("Url");
this.dataGridView1.DataSource = dataTable;
}
void cps_ClipboardChanged(object sender, EventArgs e)
{
String clipboardText = cps.GetClipboardData();
DataRow dataRow = dataTable.NewRow();
dataRow["Url"] = clipboardText;
dataGridView1.Invoke(new DelRefresh(Refresh));
//listBox1.Items.Add(string.Format("{0:HH:mm:ss} " + clipboardText, DateTime.Now));
//listBox1.SelectedIndex = listBox1.Items.Count - 1;
}
}