none
DataView.FindRows RRS feed

  • Вопрос

  • C# VS2008

    Добрый вечер!

    Есть таблица представленная через DataView. Немогу воспользоваться методом FindRows для того чтобы сделать выборку строк по двум критериям. Вот что у меня выходит:

    string fullMod = cbo1.Text + cbo2.Text;
    
       DataRowView[] foundRows = dv.FindRows(new object[]{fullMod, cbo3.SelectedValue});
    
       
    
       int count = 0;
    
       foreach (DataRowView myRowView in foundRows)
    
       {
    
        for (int count = 0; count < dv.Table.Columns.Count; count++)
    
        {
    
    
    
        datagridview.Rows[count].Cells[0].Value = myRowView["Number"].ToString();
    
         count++;
    
        }
    
    

    Может есть другой подход, то подскажите.

    Спасибо.

    14 октября 2010 г. 15:18

Ответы

  • Доброе утро. Который раз я немогу отправить ответ, аш с пятницы. Вот очередная попытка. Буду краток. Ошибку исправил и вот кирпичик кода, который мне нужен был, все работает:

    string fullMod = cboRefrigerator.Text + cboRefrigeratorClass.Text;
          // Получаем массив срок, соотетсвующих критерию поиска
          DataRowView[] foundRows = dvTitle.FindRows(new object[]{fullMod, cboTitle.SelectedValue});
          if (foundRows.Length == 0)
          {
            dgvTitle.Rows.Clear();
          }
          else
          {
            dgvTitle.Rows.Clear();
            dgvTitle.Rows.Add(foundRows.Length);
          }
    
          int count = 0;
          // Перебираем все полученные строки
          foreach (DataRowView myRowView in foundRows)
            {
              // Присваиваем значение из текущей перебираемой записи отфильтрованых строк
              dgvTitle.Rows[count].Cells[0].Value = myRowView["Number"].ToString();
              dgvTitle.Rows[count].Cells[1].Value = myRowView["Title"].ToString();
              dgvTitle.Rows[count].Cells[2].Value = myRowView["HandTitle"].ToString();
              dgvTitle.Rows[count].Cells[3].Value = myRowView["HandTitlePart"].ToString();
              dgvTitle.Rows[count].Cells[4].Value = myRowView["NotesRefNum"].ToString();
              dgvTitle.Rows[count].Cells[5].Value = myRowView["Quantity"].ToString();
              count++;
            }

    Если что не так напишите. Спасибо.

    Удачи всем.

    • Помечено в качестве ответа hochuznat 18 октября 2010 г. 6:12
    18 октября 2010 г. 6:03

Все ответы

  • А чего ты этим кодом пытаешься добиться?

    // Получаем массив срок, соотетсвующих критерию поиска  
    DataRowView[] foundRows = dv.FindRows(new object[]{fullMod, cbo3.SelectedValue});
    // первое объявление count, зачем оно здесь?
    int count = 0;
    // Перебираем все полученные строки
    foreach (DataRowView myRowView in foundRows)
    {
      // Для всех строк в изначальной таблице
      for (int count = 0; count < dv.Table.Columns.Count; count++)
      {
      // Присваиваем значение из текущей перебираемой записи отфильтрованых строк
      datagridview.Rows[count].Cells[0].Value = myRowView["Number"].ToString();
       // И даже не для всех, а через 1, так как count увеличивается, как в for'ре так и здесь
       count++;
      }
    }
    
    Почему ты считаешь, что у тебя поиск не работает. Сколько строк содержит foundRows после dv.FoundRows(... ?

    15 октября 2010 г. 5:46
    Модератор
  • DataRowView[] foundRows = dv.FindRows(new object[]{fullMod, cbo3.SelectedValue});
    На этой строке исключение: Входная строка имеет неверный формат

    Насчет <int count> и <count++> я пробовал разные варианты, поэтому забыл стереть.

    15 октября 2010 г. 7:42
  • Что содержится в fullMod и cbo3.SelectedValue ?
    15 октября 2010 г. 8:20
    Модератор
  • Доброе утро. Который раз я немогу отправить ответ, аш с пятницы. Вот очередная попытка. Буду краток. Ошибку исправил и вот кирпичик кода, который мне нужен был, все работает:

    string fullMod = cboRefrigerator.Text + cboRefrigeratorClass.Text;
          // Получаем массив срок, соотетсвующих критерию поиска
          DataRowView[] foundRows = dvTitle.FindRows(new object[]{fullMod, cboTitle.SelectedValue});
          if (foundRows.Length == 0)
          {
            dgvTitle.Rows.Clear();
          }
          else
          {
            dgvTitle.Rows.Clear();
            dgvTitle.Rows.Add(foundRows.Length);
          }
    
          int count = 0;
          // Перебираем все полученные строки
          foreach (DataRowView myRowView in foundRows)
            {
              // Присваиваем значение из текущей перебираемой записи отфильтрованых строк
              dgvTitle.Rows[count].Cells[0].Value = myRowView["Number"].ToString();
              dgvTitle.Rows[count].Cells[1].Value = myRowView["Title"].ToString();
              dgvTitle.Rows[count].Cells[2].Value = myRowView["HandTitle"].ToString();
              dgvTitle.Rows[count].Cells[3].Value = myRowView["HandTitlePart"].ToString();
              dgvTitle.Rows[count].Cells[4].Value = myRowView["NotesRefNum"].ToString();
              dgvTitle.Rows[count].Cells[5].Value = myRowView["Quantity"].ToString();
              count++;
            }

    Если что не так напишите. Спасибо.

    Удачи всем.

    • Помечено в качестве ответа hochuznat 18 октября 2010 г. 6:12
    18 октября 2010 г. 6:03