2009-04-14 9 views
2

Wenn Sie eine DataTable haben, die eine Spalte von einigen Enum-Typ hat.DataGridView an DataTable gebunden. Comboboxen für Enums erhalten

Und Sie binden ein DataGridView zu dieser DataTable (myDgv.DataSource = myDataTable) ..

Wie kann man die DataGridView zeigen eine Combobox machen (oder ist es im Dropdown-Listen? Das einzige, wo das einzige, was man tun kann, ist, Wählen Sie) in jeder Zelle für diese Spalte? Die Combobox sollte den aktuellen Wert ausgewählt haben und die anderen möglichen Enum-Werte wählbar sein.

Im Moment werden diese Zellen als einfache alte editierbare Textzellen mit der Zeichenfolgendarstellung des enum-Werts in ihnen angezeigt.

Antwort

4

Ich würde vorschlagen, dass Sie Forcing the DataGridView to do my bidding - a tale of ComboBox hackery:

Zuerst war ich optimistisch, was die Datagridview-Proben (Übersicht) (Download Die Datagridview-Proben), aber ich habe nichts gesehen, das war, was ich wollte do: nimm einen enum-Wert und stelle ihn im Raster mit einer Combobox dar. Also, hier ist, wie ich es gemacht habe.

Auch sollten Sie überprüfen How to: Bind Objects to Windows Forms DataGridView Controls:

Das folgende Codebeispiel zeigt, wie eine Sammlung von Objekten zu einem Steuerelement Datagridview binden, so dass jedes Objekt zeigt als eine separate Zeile. In diesem Beispiel wird außerdem veranschaulicht, wie eine Eigenschaft mit einem Aufzählungstyp in einer DataGridViewComboBoxColumn angezeigt wird, sodass die Dropdownliste des Kombinationsfelds die Aufzählungswerte enthält.

2

Nun, ich weiß nicht, ob das, was ich fits werde hier sagen, aber ich hatte vor kurzem eine ähnliche Anforderung: einen Link in einem an ein DataSet gebunden Datagridview angezeigt wird, ist dies

protected void grvResultado_RowDataBound(object sender, GridViewRowEventArgs e) { 
    if (grvResultado.HeaderRow == null || grvResultado.HeaderRow.Cells.Count == 0) return; 
    bool hasLink = false; 
    int ind = 0; 
    foreach (TableCell c in grvResultado.HeaderRow.Cells) { 
     if (c.Text == "link") { 
      hasLink = true; 
      break; 
     } 
     ind++; 
    } 
    if (!hasLink) return; 


    if (e.Row.RowType == DataControlRowType.DataRow) { 
     TableCell c = e.Row.Cells[ind]; 
     var lnk = new HyperLink(); 
     lnk.Text = "Ver"; 
     lnk.NavigateUrl = c.Text; 
     c.Controls.Clear(); 
     c.Controls.Add(lnk); 
    } 
} 

Sie können gewöhnen, was Sie benötigen, wie ich

tat
Verwandte Themen