Laden...

DataGridView: Erste Zeile als "Filterzeile"

Erstellt von Orothred vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.985 Views
O
Orothred Themenstarter:in
300 Beiträge seit 2007
vor 14 Jahren
DataGridView: Erste Zeile als "Filterzeile"

Hi zusammen,

wir haben hier in der Firma ein ziemlich komplexes Programm, das in VB6 geschrieben ist.

Aktuell läuft die Migration dieses Programms auf .NET

Daran bin auch ich beteiligt. Ich bin nun aktuell über einem Dialog, in dem eine Art DataGridView ist.

Die erste Zeile dieses Grids ist immer leer und wird als Filterzeile benutzt. Je nachdem was dort eingegeben wird werden in der Tabelle darunter nur noch die Datensätze angezeigt, die das eingegebene in der jeweiligen Spalte enthalten.

Wie erstelle ich so eine Filterzeile in einem DataGridView? Leider komm ich aktuell nicht an den VB6-Quellcode, sonst könnte ichs mir ja selbst sozusagen "übersetzen" ^^

A
217 Beiträge seit 2006
vor 14 Jahren

Ich kann mir das eigentlich nicht vorstellen.
Vielleicht sieht das nur so aus, als wäre das ein einzelnes Objekt/Control.

Ich vermute eher, dass es einzelne Textfelder sind, die optisch mit einem darunterliegenden Grid-Control 'harmonisieren'.

Oder es sind zwei Grid-Controls.
Das obere immer mit einer Zeile und das untere mit den Daten.
Je mehr ich darüber nachdenke, deso eher denke ich, dass es so gelöst wurde.
Das hätte den Vorteil die Spaltenbreiten auch in gleicher Weise synchron zu halten...

Zeig doch mal einen Screenshot.

Gruß,
AtzeX

O
Orothred Themenstarter:in
300 Beiträge seit 2007
vor 14 Jahren

Screenshot im Anhang...

direkt unter dieser "Trennleiste" geht dann der erste Datensatz los, kann ich allerdings nicht zeigen, zwecks Firmeninternen Daten usw...

D
24 Beiträge seit 2009
vor 14 Jahren

Wir benutzen bei uns im Unternehmen das Gid von Janus. Das lässt sich so einstellen, daß diese Filterleiste erscheint.

Bei dem normalen Grid ist mir nicht bekannt, daß es so eine Funktion gibt.

O
Orothred Themenstarter:in
300 Beiträge seit 2007
vor 14 Jahren

Hilft mir jetzt eher weniger, da wir glaube ich nicht für eine Form extra eine Komponente für knapp 800 $ kaufen ^^

1.564 Beiträge seit 2007
vor 14 Jahren

Hallo Orothred

Das DataGridView bringt da von Haus aus nix mit, kannst du aber selber hinschummeln.

Grundlegender Ansatz:
Zwei Grids untereinander. Das obere mit den Spaltenüberschriften und der Suchzeile. Direkt darunter das Grid mit den Daten.

Beispiel-Code:

   public partial class Form1 : Form {
      bool _suspendColumnSizing;

      public Form1() {
         InitializeComponent();

         dataGridView1.Columns.Add("Col1", "Header1");
         dataGridView1.Columns.Add("Col2", "Header2");
         dataGridView1.Columns.Add("Col3", "Header3");
         dataGridView1.Rows.Clear();
         dataGridView1.ColumnWidthChanged += new DataGridViewColumnEventHandler(dataGridView1_ColumnWidthChanged);

         DataTable table = new DataTable();
         table.Columns.Add("Col1", typeof(int));
         table.Columns.Add("Col2", typeof(string));
         table.Columns.Add("Col3", typeof(DateTime));
         table.Rows.Add(1, "bla", DateTime.Now.AddDays(1));
         table.Rows.Add(2, "bluff", DateTime.Now.AddDays(2));
         table.Rows.Add(3, "blubb", DateTime.Now.AddDays(3));
         dataGridView2.ColumnHeadersVisible = false;
         dataGridView2.DataSource = table;
         dataGridView2.ColumnWidthChanged += new DataGridViewColumnEventHandler(dataGridView2_ColumnWidthChanged);
      }

      void dataGridView2_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e) {
         if (_suspendColumnSizing)
            return;
         _suspendColumnSizing = true;
         dataGridView1.Columns[e.Column.Index].Width = e.Column.Width;
         _suspendColumnSizing = false;
      }

      void dataGridView1_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e) {
         if (_suspendColumnSizing)
            return;
         _suspendColumnSizing = true;
         dataGridView2.Columns[e.Column.Index].Width = e.Column.Width;
         _suspendColumnSizing = false;
      }
   }

Grüße
Flo

Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.

O
Orothred Themenstarter:in
300 Beiträge seit 2007
vor 14 Jahren

jo, ich denke so wurde es in der vb6-variante auch ungefähr gemacht, is auch das einzige was mir selbst eingefallen wäre, dachte nur da gibts vielleicht noch ne einfachere lösung.

ich danke für die hilfe