none
обработать данные в DataGridView (VB.Net) RRS feed

  • Вопрос

  • Здравствуйте

    в DataSet.xsd создана таблица (Tabl1) и она заполняется из Excel и загружается в DataGridView0

    есть DataGridView1 который заполняется из базы Access с использованием параметров подключена с помощью DataSet.xsd 

    теперь нужно обновить данные в DataGridView1 данными из DataGridView0 поля (допустим "ЦЕНА") при условии совпадения по полю "Артикул"
    далее, убедиться что всё верно обновилось и после этого обновить данные  уже в Access из DataGridView1 


    у меня не получается взять данные из DataGridView1 и работать с ними 
    получилось взять данные напрямую из базы Access и пробегаясь построчно по DataGridView0 , сравнивая по полю Артикул, изменять нужные поля, а потом запустить обновление DataGridView1 уже из изменённой базы, что не правильно...


    честно искал, но подобной проблемы не нашел 
    помогите пожалуйста 

    17 октября 2017 г. 9:25

Ответы

  • Сверять строчки наверное не обязательно. Как я понял, вам просто нужну отфильтровать по полю Артикул, поэтому можно использовать LINQ-запрос Where (если ваша версия VB их поддерживает):

    Dim result = From DataRow myRow In myDataTable.Rows Where myRow["Артикул"]=НужныйАртикул

    select myRow




    18 октября 2017 г. 15:53

Все ответы

  • "у меня не получается взять данные из DataGridView1 и работать с ними"

    Что именно не получилось? если DataGidView привязан к DataTable, нужно просто брать DataTable.Rows

    "а потом запустить обновление DataGridView1 уже из изменённой базы, что не правильно"

    В чем именно неправильно? Нет правила, что "внести изменения напрямую в базу и потом обновить UI" хуже "работать с локальным кэшем и потом все слить в базу". Каждый способ имеет свои достоинства и недостатки.

    18 октября 2017 г. 8:23

  • "Что именно не получилось? если DataGidView привязан к DataTable, нужно просто брать DataTable.Rows"
    да, привязан к DataTable
    меня смущает, что там не таблица, а запрос с параметром и придётся, если я применю 
    DataTable.Rows сверять каждую строчку из DataGridView0 с каждой строчкой DataGridView1

    я сегодня переделал все заново, не стал использовать DataSet.xsd, а DataGridView1 заполняю

    DataGridView2.ClearSelection() 'очистить
    
    'вынес на верх Dim Connection As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=...база.mdb; Persist Security Info=False;")
    Connection.Open()
    'только нужные поля с фильтром
    Dim SQL_запрос As String = "Select Таблица1.ИД, Таблица1.Цена, Таблица1.[Артикул], From Таблица1 Where (((Таблица1.[ИД поставщика])=" & CInt(ComboBox_ИД_Поставщика.Text) & "))"
    Dim Command As New OleDbCommand(SQL_запрос, Connection)
    Dim Adapter As New OleDbDataAdapter(Command)
    Dim DataSet As New DataSet
    Adapter.Fill(DataSet, "Таблица1")
    DataGridView1.DataSource = DataSet
    DataGridView1.DataMember = "Таблица1"
    Connection.Close()

    можно с помощью запроса SQL-UPDATE-запроса обновить DataGridView1 данными из DataGridView0?

    "В чем именно неправильно?"

    если базу обновят, то уже сложней вернуть "как было", лучше чтоб еще раз всё проверили, перед обновлением...


    18 октября 2017 г. 11:40
  • С помощью SQL-запроса update обновляются данные в БД. Данные в локальной модели можно обновить простым присваиванием полей. Не пишу на Basic, это должно быть что-то вроде:

    DataSet["Таблица1"].Rows[i]["Цена"]=NewValue;

    18 октября 2017 г. 15:05
  • уточняю правильно ли я понял
    т.е.
    "сверять каждую строчку из DataGridView0 с каждой строчкой DataGridView1"
    либо в базе создать промежуточную таблицу и тогда можно использовать SQL-запроса update?



    18 октября 2017 г. 15:26
  • Сверять строчки наверное не обязательно. Как я понял, вам просто нужну отфильтровать по полю Артикул, поэтому можно использовать LINQ-запрос Where (если ваша версия VB их поддерживает):

    Dim result = From DataRow myRow In myDataTable.Rows Where myRow["Артикул"]=НужныйАртикул

    select myRow




    18 октября 2017 г. 15:53
  • Microsoft Visual Studio Community 2015
    Версия 14.0.25431.01 Update 3
    Microsoft .NET Framework
    Версия 4.6.01055

    версия надеюсь что подойдёт, завтра попробую
    спасибо!, про "LINQ-запрос Where" не знал

    18 октября 2017 г. 18:59