Обновление строк таблицы данных с помощью кнопки - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть DataGridView, который имеет столбец флажок.То, что я пытаюсь сделать, это с помощью нажатия кнопки обновить те строки, где установлен флажок, получив определенные данные столбца из этих строк (id) и отправив их команде обновления sql, которая у меня есть.Сначала я заполняю сетку данных таблицей данных, а затем создаю столбец флажка со свойством readonly как false, чтобы я мог щелкнуть по нему.Затем из события onclick от кнопки сделайте что-то вроде этого:

private void AnularBoton_Click(object sender, EventArgs e)
    {
        foreach datagridview row in datagrid {
          if a certain column (checkbox) from that row is checked
          then get the id from that row (id is the first column)
        }
    }

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

Ответы [ 3 ]

0 голосов
/ 07 декабря 2018

Попробуйте следующий код, который получит значение столбца вашего флажка и сохранится в массиве:

   foreach(DataGridViewRow dgr in DataGridview.Rows)
    {
       if(dgr .Cells["checkbox"].Value)==True)
       {
          int id=dgr.Cells["id"].Value);
        }              
    }

Спасибо.

0 голосов
/ 07 декабря 2018

Добавьте логический столбец в таблицу данных, затем выполните:

foreach(DataRow ro in YourDataTableNotYourDataGridView.Rows){
  if((bool)ro["BOOLEAN COLUMN NAME HERE"]){
    //do something
    int id = (int)ro["id"];

    //but if you're manipulating the data, just do it directly, don't collect the id
    ro["name"] = "John";

    //the only thing you can't do, is delete the row from the table, because your enumerating the table
    //if you want to do that, use a regular for loop (with an index int) in reverse order
  }
}

Пользователь отметит соответствующие строки с помощью DGV, в результате чего логический параметр станет установленным в модели данных, а затем вы используете его

Вы сосредотачиваетесь на сетке данных, как если бы это было чем-то, что содержит данные * и должно программно управляться и взаимодействовать;это не должноDGV - это просто инструмент, который пользователь может использовать для просмотра и манипулирования моделью данных.Программно вы должны обращаться к модели данных и манипулировать ею, а не к представлению / контроллеру

*, которые вы сказали «сначала я заполняю DGV данными» - это неправильный способ оценки.DGV - это представление данных, которые живут в других местах, оно не заполняется непосредственно какими-либо данными, и не должно.Основная концепция теории MVC заключается в том, что проблемы модели, представления и контроллера остаются разделенными.Из практических соображений бывает, что V и C часто выполняются одним и тем же, но M остается отличным

Кроме того, ваша жизнь станет намного проще, если вы будете использовать строго типизированные наборы данных для этого, а также значительно меньше приведения и столбцов.доступ по имени-в-строке:

foreach(TypedDataRow ro in typedDataTable){
  if(ro.BoolColumnName)
    //do something
}

Все становится проще и компактнее, если вы тоже задействуете LINQ:

List<int> segurosId = datatable.Where(r => r.BoolColumn).Select(r => r.id).ToList();

Эта строка кода работает так же, как ваша;

List<int> segurosID = new List<int>(); foreach (DataGridViewRow dc in SegurosDataGridView.Rows) { if (dc.Cells["Anular"].Value != null) { if ((Boolean)dc.Cells["Anular"].Value == true) { segurosID.Add(Convert.ToInt32(dc.Cells["Seguro"].Value)); } } }

Конечная точка примечания;просто переберите данные и измените данные напрямую;не вдавайтесь в какой-то обходной метод итерации данных, поиска логических значений, извлечения идентификаторов, использования этих идентификаторов для извлечения каждой строки, изменения строки. Возможно, вам придется это сделать, если вы совершаете ошибку, пытаясь найти что-то новое.Сетка данных выглядит так, как если бы она была хранилищем данных, но ключевая концепция этого ответа заключается в том, чтобы вы попали в MVC и поняли разделение, программно изменив данные напрямую и предоставив пользователю возможность не программно изменять данные через сетку.В качестве крайней аналогии, если бы вы писали программу, которая обновляла базу данных, вы просто обновили бы базу данных, не установили бы на компьютер Sql Server management Studio, а затем использовали бы SendKeys для управления им и обновления базы данных.Точно так же вы не должны приступать к манипулированию данными в таблице данных путем программного взаимодействия с представлением таблицы, к которому эти данные подключены

0 голосов
/ 07 декабря 2018

Я прочитал ваш вопрос, который вы хотите, попробуйте приведенный ниже код, приведенный ниже код, проверьте значение столбца кнопки флажок, проверьте, что строки получают идентификатор ... попробуйте следующий код

foreach(DataGridViewRow dgr in yourdatagridviewname.Rows)
{
    if(dgr.Cells["yourcheckboxcolumnName"].Value==True)
    {
        var id=Convert.ToInt32(dgr.Cells["youridfieldName"].Value.ToString())
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...