2016-06-14 14 views
1

Ich muss einige Texte auf der DataGridViewButtonColumn zeigen. Ich habe viele ähnliche Fragen über diese auf SO gelesen. Viele von ihnen empfehlen die Einstellung zu True, was nicht für mich gilt. Es scheint in einer seltsamen Weise, dass Microsoft es macht, mindestens eine row zu haben, so dass die Schaltfläche den Text anzeigen wird. C# datagridviewbuttoncolumn kein Text zeigt

Das folgende ist mein Code:

 DataGridViewButtonColumn EditColumn = new DataGridViewButtonColumn(); 
     EditColumn.HeaderText = "Complete"; 
     EditColumn.Name = "Complete"; 
     EditColumn.UseColumnTextForButtonValue = True; 
     dataGridView.Columns.Add(EditColumn); 

Dieser Code nicht den Text auf der DataGridViewButtonColumn zeigen doesn:

Der Code, der hier arbeitet:

 dataGridView1.ColumnCount = 2; 
     dataGridView1.Columns[0].Name = "a"; 
     dataGridView1.Columns[1].Name = "b"; 

     ArrayList row = new ArrayList(); 
     row.Add("1"); 
     row.Add("2"); 
     dataGridView1.Rows.Add(row.ToArray()); 

     DataGridViewButtonColumn btn = new DataGridViewButtonColumn(); 
     btn.Name = "text"; 
     btn.UseColumnTextForButtonValue = true; 
     dataGridView1.Columns.Add(btn); 

Dieser Code funktioniert, aber jedoch Ich bekomme meine Daten aus einer Datenbank und werde daher dataGridView.Rows.Add(row.ToArray()) hier nicht verwenden. Wie bekomme ich den Text auf der DataGridViewButtonColumn angezeigt?

+0

Überprüfen Sie [diesen Stapelüberlauf] (http://stackoverflow.com/questions/30256811/datagridview-button-text-not-appearing-despite-usecolumntextforbuttontext-set-to) –

+0

Siehe [hier] (https: // social.msdn.microsoft.com/Forums/windows/en-US/64110c71-aa5c-40b4-a22f-ed800c603392/showing-text-on-the-button-in-datagridviewbuttoncolumn-c?forumum=winformsdatacontrols) für wie zu tun die Bindung. – TaW

Antwort

1

Sie haben zwei Probleme zu lösen:

  • Wie binden eine Button Spalte zu einer DataSource
  • Wie machen die DataSource create nicht nur Spaltentypen Standard, sondern auch eine (oder mehrere) Tastenspalte

enter image description here

Das erste Problem wird grundsätzlich durch Setzen der DataPropertyName der Spalte gelöst.

Aber ich weiß nicht, wie oder sogar wenn es möglich ist, die ColumnTypes automatisch erstellt zu beeinflussen.

Deshalb schlage ich eine Abhilfe: Statt auf den AutoGenerateColumns zu verlassen wir es selbst in einem kleinen Helferfunktion tun können:

Diese Spalten löschen und erstellt einen neuen für jede Spalte in einem DataTable, die Eigenschaften mit Hilfe der Spalten in der Tabelle. Zu sagen, es die Spalte (n) wollen wir Tasten sein passieren wir einen String mit den Spaltennamen durch Leerzeichen umgeben:

void CreateSpecialColumns(DataTable dt, DataGridView dgv, string buttons) 
{ 
    dgv.Columns.Clear(); 

    for (int i = 0; i < dt.Columns.Count; i++) 
    { 
     DataColumn dc = dt.Columns[i]; 
     if (buttons.Contains(" " + dc.ColumnName + " ")) 
     { 
      DataGridViewButtonColumn buttonColumn = new DataGridViewButtonColumn(); 
      buttonColumn.HeaderText = dc.Caption; 
      buttonColumn.Name = dc.ColumnName; 
      buttonColumn.ValueType = dc.DataType; 
      buttonColumn.DataPropertyName = dc.ColumnName; 
      dgv.Columns.Add(buttonColumn); 
     } 
     else 
     { // normal columns 
      int c = dgv.Columns.Add(dc.ColumnName, dc.Caption); 
      dgv.Columns[c].ValueType = dc.DataType; 
      dgv.Columns[c].DataPropertyName = dc.ColumnName; 
     } 
    } 
} 

Hier ist, wie ich es genannt mit einem DataTable DT:

dataGridView1.AutoGenerateColumns = false; 
CreateSpecialColumns(DT, dataGridView1, " Cook Waiter ", ""); 
dataGridView1.DataSource = DT; 

Beachten Sie, dass dies nur funktioniert, wenn die -Eigenschaft nicht auf True festgelegt ist!