2014-09-24 1 views
0

У меня есть визуальная базовая программа с datagridview, которая привязана к базе данных mysql при загрузке ... У меня также есть поля, где вы можете обновлять выбранные строки, добавлять, удалять и т. д., и я бы хотел иметь автообновление при обновлении ... Однако я не могу понять, как это сделать, поскольку таблица просто добавляет новые строки под старыми строками , Есть ли способ иметь полное обновление таблицы для mysql bound datagridview без перезапуска программы?Как реализовать автоматическое обновление на datagridview, привязанное к базе данных MySQL в Visual Basic (.NET)

Заранее благодарен!

ответ

1

Сетка не связана с MySQL. Он связан с DataTable. Если вы хотите получить полное обновление данных, тогда просто очистите эту таблицу и затем повторно заселите ее.

myDataTable.Rows.Clear() 
+0

Кажется, что просто заполняется больше строк под текущими строками. –

+0

Если вы очистили «DataTable» и привязаны к сетке, то нет текущих строк. Я думаю, вам нужно показать нам, что вы на самом деле делаете, а не описывать, что вы думаете, что делаете. – jmcilhinney

+0

Datagridview заполняется из запроса mysql из базы данных, и когда я пробовал этот код, он ошибается, говоря «Не могу удалить этот список». –

0

Как предложен jmcilhinney, DataGridViews связаны с DataTables (или иногда списков в моем случае), так что он сказал звучит, как он должна работы. Поскольку, судя по всему, это не так, как вы хотели, вот мое предложение:

Вы сказали, что у вас есть «поля», где вы можете обновлять, добавлять, удалять и т. Д. Выбранную строку, правильно? Это также звучит так, как будто вы делаете что-то с новыми строками. Поскольку вы предположили, что это привязка к привязке к базе данных, я сомневаюсь, что вы на самом деле добавляете их обычным способом, но вместо этого имеете какую-то программную альтернативу.

Итак, попробуйте реализовать свое решение как меньшее «переписать» и больше обновлений SQL. Когда пользователь вводит данные для строки, которую они хотят обновить, или новую строку, которую они хотели бы создать, выполните поиск строк для данного первичного ключа.

В случае DataTable, код будет выглядеть примерно так:

string s = "primaryKeyValue"; 
DataRow foundRow = dataSet1.Tables["AnyTable"].Rows.Find(s); 
foundRow.Item["DesiredColumn"] = newValue; 

Источник: https://msdn.microsoft.com/en-us/library/y06xa2h1.aspx

В случае списка, связанного как DataSource, я полагаю, вы должны были бы чтобы сделать что-то вроде этого:

List<Thing> things = new List<Thing>(); // in case this wasn't obvious 
Thing tempThing; 
tempThing = things.Find(x => x.PartName.Contains("seat"))); 
tempThing.Value = newValue; 

После того, как вы изменили основной источник данных, то, теоретически, вы должны быть в состоянии просто позвонить DataGridView.Ref resh(), но вам, возможно, придется сделать что-то более сложное, например, установить источник данных в null, а затем переподтвердить его, чтобы заставить EndEdit.

Я знаю, что это поздно, но я надеюсь, что это все еще помогает кому-то.

Смежные вопросы