VB.Net DataGrid: weitere Fragen

Hallo,

ich habe noch ein paar Fragen zum DataGrid, nachdem bisher so toll geholfen wurde :smile:

Ich möchte gerne eine Art DropDown-Liste in manche Spalten einfügen. Gibt es soetwas?

Dann möchte ich gerne entweder ein paar Spalten ReadOnly machen oder ein paar Spalten ausblenden. Wer kann mir dabei helfen?

Danke & Grüße

Sven

Noch eine Frage hinten dran :wink:
Hallo

und gleich noch eine Frage bei der ihr mir bestimmt helfen könnt:

Ich muss die einzelnen Datensätze noch verarbeiten.

Wie mach ich das am besten?
Sowas wie DataSet.Item[5(row),2(column)].value hab ich nicht gefunden :frowning:

Danke und bye!

Hallo Sven,

Ich möchte gerne eine Art DropDown-Liste in manche Spalten
einfügen. Gibt es soetwas?

Ja, dazu ist aber etwas action nötig. Hatte soetwas mal über Google gefunden, aber war mir aber zu fummelig. Ich „male“ jetzt ein LOV über die selektierte Zeile in die entsprechende Zelle. Ist zwar Suboptimal, aber programmtechnisch einfach. Beim Zeilenwechsel den Wert in die Zelle schreiben.

Dann möchte ich gerne entweder ein paar Spalten ReadOnly
machen oder ein paar Spalten ausblenden. Wer kann mir dabei
helfen?

Du must einenen DataGridTableStyle und der Tabelle zuordnen (MappingName) Dies beinhaltet GridColumnStyles, mit dem man die einzelnen Spalten formatieren kann: …Width = 0.

DataGridTableStyle myGridStyle = new DataGridTableStyle();


myGridStyle.MappingName = "NamesTable";

 DataGridTextBoxColumn nameColumnStyle =
 new DataGridTextBoxColumn();
 nameColumnStyle.MappingName = "Name";
 nameColumnStyle.HeaderText = "Name";
 myGridStyle.GridColumnStyles.Add(nameColumnStyle);

 DataGridTimePickerColumn timePickerColumnStyle =
 new DataGridTimePickerColumn();
 timePickerColumnStyle.MappingName = "Date";
 timePickerColumnStyle.HeaderText = "Date";
 timePickerColumnStyle.Width = 100;
 timePickerColumnStyle.ReadOnly = false;
 myGridStyle.GridColumnStyles.Add(timePickerColumnStyle);

 grid.TableStyles.Add(myGridStyle);

Falls du noch nicht kennst: Denke daran, das du nur ein eDataView vor die hast. Wenn man die sortieren läst, stimmen die Zeilen mit den Zeilen der Tabelle nicht mehr überein!

Falls du noch Code Beispiele brauchst, morgen hab ich welceh im Zugriff, dann ist Weihnachten!

mfg

Dirk.Pegasus

Hallo Dirk,

gerne kannst du mir noch Code Beispiele zukommen lassen.
INsbesondere das mit dem Malen der Liste über den Spaltennamen!

Danke dir und frohe weihnachten!

Grüße

Sven

mfg

Dirk.Pegasus

Hallo Sven,

Dumm gelaufen. Hatte das Projekt auf einem Stick extra mit nach Hause nehmen wollen, aber die Kopie ist unvollständig. Wenn das dringend ist (bin planmäßig erst am 8.1. wieder im Büro) muss ich da mal anrufen. Meld dich mal!

Ansonsten ein frohes Fest!

mfg

Dirk.Pegasus

Hallo,

war jetzt auch drei Tage weg, also sehr dringend ist es nicht, wenn du es mir nach dem 8.1. geben kannst, reicht mir das völlig!

Tausend Dank und ein schönes Recht-Weihnachtsfest und guten Rutsch!

Liebe Grüße

Sven

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Sven,

dir auch frohe Weihnachten und einen guten Rutsch gehabt zu haben!

Hier das Malen des LOV:

//irgendwo als var deklarieren
protected System.Windows.Forms.ComboBox type;
//dann das LOV mit den Werten füllen.
//
//
//für das später benötigte ...Find(id) muss die Tabelle einen PrimaryKey haben!
//xmlTable ist die Datentabelle für das DataGrid xmlGrid, das gleich benutzt wird!
DataColumn[] col = new DataColumn[1];
col[0] = xmlTable.Columns["id"];
xmlTable.PrimaryKey = col;
xmlGrid.DataSource = xmlTable;
//
//ich steuere mit fast allen events "meine" Funktion changeView() an.
//in der ist bei mir der folgende Code enthalten:
//xmlGrid ist das DataGrid, in dem das lov sein soll
if (xmlGrid.CurrentRowIndex != -1)
 {
 rec = xmlGrid.GetCellBounds(xmlGrid.CurrentRowIndex,1);

 type.Left = rec.Left + xmlGrid.Left;
 type.Top = rec.Top + xmlGrid.Top;
 type.Height = rec.Height;
 type.Width = rec.Width;
 type.BringToFront();

 if (
 type.Top xmlGrid.Left + xmlGrid.Width - type.Width - 12
 || type.Left xmlGrid.Top + xmlGrid.Height - type.Height + 2
 )
 type.Visible = false;
 }
 else
 type.Visible = false;
//
//
// dazu ein Eventhandler, der den Wert des LOV zurückschreibt:

 private void type\_SelectedIndexChanged(object sender, System.EventArgs e)
 { 
 bindingManager = xmlGrid.BindingContext[xmlGrid.DataSource];
 DataRow dr = ((System.Data.DataRowView) bindingManager.Current).Row;
 string id = dr["id"].ToString();
 DataRow currentChild = xmlTable.Rows.Find(id);
 currentChild["type"] = type.Text;
 xmlTable.AcceptChanges();
 }

Das Positionieren des LOV habe ich noch nicht „ausgereizt“. Je nachdem wie man die Spalten formatiert oder scrollt, kann das schonmal komisch aussehen. Aber im Wesentlichen tuts das! Verbesserungen(-vorschläge) nehme ich natürlich gerne an!

War das „Formatieren der Spalten“ ausreichend? Oder auch da noch ein Beispiel gefällig?

Noch Fragen?

mfg

Dirk.Pegasus