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" ^^
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
Screenshot im Anhang...
direkt unter dieser "Trennleiste" geht dann der erste Datensatz los, kann ich allerdings nicht zeigen, zwecks Firmeninternen Daten usw...
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.
Hilft mir jetzt eher weniger, da wir glaube ich nicht für eine Form extra eine Komponente für knapp 800 $ kaufen ^^
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ß.
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