0

Я новичок в vb.net и работаю над VS 2012. У меня есть datagridview, в котором отображаются строки таблицы базы данных ms-access 2007. Я создал форму (с текстовыми полями и кнопками «Добавить/обновить/Отменить» - все динамически (с использованием кода)), которая показывает данные, когда выбрана строка datagridview.Просмотр строки datagridview в динамически созданной форме

Теперь я хочу, чтобы значения полей (выбранной строки) отображались в текстовых файлах и любые изменения, внесенные в текстовые поля, которые необходимо добавить/обновить в базе данных, в зависимости от щелчка кнопки. Как это можно сделать? То есть, как:

  1. Заполните текстовые поля со значениями строк, и,

  2. Update/Добавить изменения в базу данных?

В принципе, настоящая проблема связана с динамически создаваемыми элементами управления на форме! Я получаю null reference exception.

Пожалуйста, помогите! Большое спасибо!

+0

Помимо прочего, если вы создаете элементы управления во время выполнения, вы должны разработать способ сохранить ссылку на них или найти их в коллекции 'Controls' – Plutonix

ответ

0

Чтобы ссылаться на динамически созданные элементы управления, просто сохраните эти элементы управления в переменных формы.

Заполните текстовые поля с рядом значений

dim v as object = MyDataGridView.CurrentRow("MyColumName").Value 
MyTextBox.Text = "" 
if NOT IsDBNull(v) Then MyTextBox.Text = v.ToString() 
End If 

Update/Добавить изменения в базу данных

При проверке формы издания, обновить DataTable и, предполагая, что у вас есть загрузите dataTable с помощью DataAdapter, вызовите функцию обновления DataAdapter:

myDataAdapter.Update(myDataSet, "myDataTableName") 
+0

Большое спасибо @ T.S!! – Abcecedarian

+0

Большое спасибо @Graffito! – Abcecedarian

+0

Я использую кнопку «Добавить», чтобы добавить в таблицу сейчас, но UNABLE ссылается на ANY из текстовых полей или значений в них. Ошибка в том, что cotrol не объявлен. Кроме того, если я DirectCast элементы управления, я получаю исключение NullReferenceException. Pls предлагает. – Abcecedarian

0

Во-первых, давайте позаботимся о NullReferenceException - вам нужно поддерживать ссылки на свои элементы управления. Например, вы динамически создаете форму следующим образом: Dim f as New Form(). В этом случае вы можете добавлять к нему элементы управления и т. Д., Но вы не можете иметь внутренний контроль над объявлением. Итак, вы добавляете элементы управления, f.Controls.Add...

Я думаю, что вы создали форму, на которой вы динамически добавляете элементы управления. В этом случае вы можете сделать

Dim ctrlList As New Dictionary(Of String, Control)() 
Dim txtBox1 As New TextBox() 
txtBox1.Location = New Point(0, 0) 
' set txt box here . . . 
Me.Controls.Add(txtBox1) 
ctrlList.Add("txtBox1", txtBox1) ' reference this to get to controls dynamically 

Как набрать контроль. Существует два основных метода. Один - программно, другой - с помощью привязок.

Поскольку вы делаете что-то динамически, вот что вы можете сделать - построить экран полностью динамически. Для этого, если, например, ваш оператор select будет Select col1, col2, col3 from table, вы создадите текстовое поле для каждого столбца и поместите его в нужное место. Теперь вы можете получить DataRow из выбранной строки в сетке и набор текста текстового поля в

ctrlList("col1").Text = dr("col1") 

Где «col1» будет одновременно - имя ключа для вашего контроля и столбца. Вы также можете назвать этот контроль тоже.

Второй метод использует привязки. Вы можете привязать свою сетку и текстовые поля.Таким образом, вы берете свои средства управления заранее, а затем вам не нужно устанавливать свойство text.

С помощью этой системы вы можете полностью динамически загружать любые данные. Итак, если у вашего select будет 10 столбцов, у вас будет 10 элементов управления и т. Д. После того, как вы закончите с экрана, вам нужно удалить все из формы и коллекции и приготовьтесь перезагрузить новый набор элементов управления.

Но я должен сказать, вам нужно немного опыта, чтобы создать действительно функциональную систему, подобную этой.

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

  • Нет связанных вопросов^_^