Member 13321249 Ответов: 1

Как получить отдельные строки из datagridview1 и передать их в datagridview2


Я получил этот код, где он выбирает различные значения из datagridview1 и передает результат в datagridview2:

более подробная информация:
Данные из datagridview1

Цитата:
Сумма Кода
Про1 100.00
Pro2 дополнительно 300.00
Про1 100.00
Про1 100.00
Pro2 дополнительно 300.00


Цитата:
Результат должен быть помещен в datagridview2, как показано ниже;

Количество Кодов
Pro1 100.00 3
Pro2 300.00 2


Что я уже пробовал:

Dim dic As New Dictionary(Of String, Integer)()
            Dim cellValue As String = Nothing
            For i As Integer = 0 To dgvSubjectsEnrolled.Rows.Count - 1
                If Not dgvSubjectsEnrolled.Rows(i).IsNewRow Then
                    If dgvSubjectsEnrolled(0, i).Value > 0 Then
                        cellValue = dgvSubjectsEnrolled(0, i).Value.ToString()
                        If Not dic.ContainsKey(cellValue) Then
                            dic.Add(cellValue, 1)
                        Else
                            dic(cellValue) += 1
                        End If
                    Else
                    End If
    
                End If
            Next
    
            Dim sb1 As New StringBuilder()
            Dim sb2 As New StringBuilder()
            For Each keyvalue As KeyValuePair(Of String, Integer) In dic
                sb1.AppendLine(String.Format("{0}", keyvalue.Key, keyvalue.Value))
                sb2.AppendLine(String.Format("{1}", keyvalue.Key, keyvalue.Value))
            Next
            Me.dgvsub.Rows.Add(sb1.ToString, sb2.ToString())


Цитата:
Код выполнен успешно но результат таков:

Количество Кодов
Pro1Pro2 32

Данные были объединены в одну строку. Следующее значение должно быть в следующей строке.
Пожалуйста, отредактируйте этот код.

Graeme_Grant

Вы пробовали отлаживать свой код - устанавливая точку останова и проходя через нее, чтобы увидеть, что он делает?

1 Ответов

Рейтинг:
2

Karthik_Mahalingam

написанный на c#, попробуйте понять код и написать на VB, вы получите помощь от этих онлайн-инструментов преобразования
CodeTranslator: перевод кода из VB.NET <-> C# [^]
Преобразователь Кодов[^]
обратитесь к встроенным комментариям

private void Form1_Load(object sender, EventArgs e)
      {
          DataTable dt = new DataTable();
          dt.Columns.Add("Code");
          dt.Columns.Add("Amount");
          dt.Rows.Add("Pro1", 100.00);
          dt.Rows.Add("Pro2", 300.00);
          dt.Rows.Add("Pro1", 100.00);
          dt.Rows.Add("Pro1", 100.00);
          dt.Rows.Add("Pro2", 300.00);
          dataGridView1.DataSource = dt;

          DataTable dt2 = new DataTable();
          dt2.Columns.Add("Code");
          dt2.Columns.Add("Amount");
          dt2.Columns.Add("Count");


          List<string> lstDistinct = new List<string>();  // stores the combination of Code_Amount
          foreach (DataGridViewRow row in dataGridView1.Rows)
          {
              string code = row.Cells[0].Value.ToString();
              string Amount = row.Cells[1].Value.ToString();
              lstDistinct.Add(code + "_" + Amount);
          }

          lstDistinct = lstDistinct.Distinct().ToList();  // Take distinct using linq

          foreach (string item in lstDistinct)  // iterate the distinct values
          {
              string code = item.Split('_')[0];
              string Amount = item.Split('_')[1];
              int count = 0;
              foreach (DataGridViewRow row in dataGridView1.Rows)  // search for the values in dgv1 to get the count
              {
                  string dgv1code = row.Cells[0].Value.ToString();
                  string dgv1Amount = row.Cells[1].Value.ToString();
                  if (code == dgv1code && Amount == dgv1Amount)  // comparision
                      count++;  // increament the counter if matches
              }
              dt2.Rows.Add(code, Amount, count);  // add the value to datatable
          }
          dataGridView2.DataSource = dt2;




      }