Dynamiczny filter datagridview przy pomocy kontrolki textbox

0

Witam
Mam bazę firmy transportowej a w niej tabelę kierowcy którą przeciągnąłem na formularz przy użyciu DataGridView. Chciałbym przy pomocy 2 textboxów przeszukiwać dynamicznie jej kolumny czyli imię i nazwisko (imię - textBox1 , nazwisko - textBox2). Mam problem bo po wpisaniu w textbox1 konkretnego imienia wyświetla mi kierowców z tymi samymi nazwami jednak gdy chcę jeszcze dodatkowo przefiltrować wpisując w textbox2 nazwisko nic się nie dzieje. Bardzo proszę o pomoc i cierpliwość gdyż to dopiero początek mojej przygody z programowaniem :)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


namespace Firma_Transportowa
{
    public partial class Wyszukaj_kier : Form
    {
        public Wyszukaj_kier()
        {
            InitializeComponent();
        }
   private void Wyszukaj_kier_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'bazaDataSet.kierowcy' table. You can move, or remove it, as needed.
            this.kierowcyTableAdapter.Fill(this.bazaDataSet.kierowcy);

        }

   private void textBox1_TextChanged(object sender, EventArgs e)
   {
       // DataView component
       DataView view = new DataView();
       view.Table = bazaDataSet.Tables["kierowcy"];
       view.RowFilter = "imie LIKE '%" + textBox1.Text + "%'";
       kierowcyDataGridView.DataSource = view;
    }
   private void textBox2_TextChanged(object sender, EventArgs e)
   {
       // DataView component
       DataView view = new DataView();
       view.Table = bazaDataSet.Tables["kierowcy"];
       view.RowFilter = "nazwisko LIKE '%" + textBox2.Text + "%'";
       kierowcyDataGridView.DataSource = view;
   }
  }
}
 
0

trochę po macoszemu ale efekt będzie na pewno prawidłowy.
Pod oba zdarzenia zmiany tekstu dodaj tą samą metodę.
Poniżej pseudo kod:

private void textBox_TextChanged(object sender, EventArgs e)
{
   string imie = textBoxImie.text;
   string nazwisko = textBoxNazwisko.text;
   
    foreach(DataGridRow row in dataGridView.Rows)
   {     

      //w cell wpisujesz nazwe kolumny
      //jezeli w komore imie lub nazwisko nie znaleziono ciagu znakow usun/ukryj wiersz
      if(row.cell["imie"].value.toString().IndexOf(imie) == -1 
         && row.cell["nazwisko"].value.toString().IndexOf(nazwisko) == -1)
      {
          row.Visable = false;
      }
   }
}
0

Poprawiłem kod jak kazałeś:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


namespace Firma_Transportowa
{
    public partial class Wyszukaj_kier : Form
    {
        public Wyszukaj_kier()
        {
            InitializeComponent();
        }
   private void Wyszukaj_kier_Load(object sender, EventArgs e)
        {
          

        }
private void textBox_TextChanged(object sender, EventArgs e)
   {
       string imie = textBox1.Text;
       string nazwisko = textBox2.Text;

       foreach (DataGriRow row in kierowcyDataGridView.Rows)
       {

           //w cell wpisujesz nazwe kolumny
           //jezeli w komore imie lub nazwisko nie znaleziono ciagu znakow usun/ukryj wiersz
           if (row.cell["imie"].value.toString().IndexOf(imie) == -1
              && row.cell["nazwisko"].value.toString().IndexOf(nazwisko) == -1)
           {
               row.Visable = false;
           }
       }
   }
  }
}

I podczas kompilacji wyskakuje błąd:
Error 1 The type or namespace name 'DataGriRow' could not be found (are you missing a using directive or an assembly reference?)
Czy DataGriRow występuje tylko w C# .NET 4.5 ?

0

Nieuważnie przepisałeś - DataGriRow to nie to samo co DataGridRow. Zamiast pisać DataGridRow możesz też użyć słowa kluczowego var.

0
ikolp napisał(a):

Nieuważnie przepisałeś - DataGriRow to nie to samo co DataGridRow. Zamiast pisać DataGridRow możesz też użyć słowa kluczowego var.

Poprawiłem błąd ale niestety dalej to samo:
Error 1 The type or namespace name 'DataGridRow' could not be found (are you missing a using directive or an assembly reference?)
Czy nie trzeba stworzyć czasem jakiejś klasy DataGridRow
z tego http://msdn.microsoft.com/en-us/library/system.windows.controls.datagridrow%28v=vs.100%29.aspx by wynikało że tak ?

0

Jeżeli korzystamy z kontrolki DataGridView, to chyba logiczne, że składa się ona z DataGridViewRow, a nie DataGridRow. DataGrid to zupełnie inna kontrolka.

1 użytkowników online, w tym zalogowanych: 0, gości: 1