2009-02-26 12 views
4

Ich habe eine DataGridView, die ich an eine DataTable binde. Die DataTable ist ein rein numerischer Wert. Es ist erforderlich, dass alle n Zeilen in der DataGridView Text enthalten und nicht die numerischen Werte (um Abschnitte für den Benutzer visuell zu trennen). Ich bin glücklich, diese Textdaten nach dem Binden in die DataTable oder in das DataGridView zu setzen, aber ich sehe keine Möglichkeit, diese Textdaten in beide Spaltenformate zu setzen, da beide numerische Daten benötigen - ich bekomme ein "kann nicht Setzen Sie eine Zeichenfolge in einen Dezimal "Fehler für beide. Irgendwelche Ideen, wie ich das Format einer bestimmten Zeile oder Zelle in der DataTable oder DataGridView ändern?Wie kann ich verschiedene Zellenformate in WinForm DataGridView erstellen C#

Antwort

4

Sie können einen Handler für den Cellformatting-Ereignis des Datagridview bieten, wie zum Beispiel:

public partial class Form1 : Form 
    { 
     DataGridViewCellStyle _myStyle = new DataGridViewCellStyle(); 

     public Form1() 
     { 
      InitializeComponent(); 

      _myStyle.BackColor = Color.Pink; 
      // We could also provide a custom format string here 
      // with the _myStyle.Format property 
     } 

     private void dataGridView1_CellFormatting(object sender, 
      DataGridViewCellFormattingEventArgs e) 
     { 
      // Every five rows I want my custom format instead 
      // of the default 
      if (e.RowIndex % 5 == 0) 
      { 
       e.CellStyle = _myStyle; 
       e.FormattingApplied = true; 
      } 
     } 

     ... 

Für Unterstützung auf Ihren eigenen Stil finden Sie im DataGridView.CellFormatting Event Thema in der Online-Hilfe zu schaffen.

1

Ich habe die Janus GridEx für diese Art von Nicht-Standard-Verhalten verwendet. (Zum Teil weil es viel mehr als nur das tut, wie Gruppieren und Summieren, Kartenansicht, etc.) Es gibt einige gute Demos auf der Website.

(kein Verkaufsargument;. Ich hatte gerade eine gute Erfahrung ihre Komponente)

Screenshot of grouped and summed grid data http://www.janusys.com/janus/library/CustomPages/images/Hierarchical1.jpg

+0

Sie glauben also nicht, dass meine Anforderung mit dem Standard DataGridView erfüllt werden kann? – Handleman

+0

Nun, ich zögere, das zu sagen, weil es hier Leute mit mehr Erfahrung gibt, die das WinForms-Kontrollverhalten ändern als ich. Ich bin ehrlich gesagt überrascht, dass niemand sonst auftaucht. – JMD

1

Ist dies Ihr Problem lösen?

// Set the data source. 
dataGridView1.DataSource = dataTable1; 

// Create a new text box column. 
DataGridViewColumn c1 = new DataGridViewTextBoxColumn(); 
const string C1_COL_NAME = "Custom1"; 
c1.Name = C1_COL_NAME; 

// Insert the new column where needed. 
dataGridView1.Columns.Insert(1, c1); 

// Text can then be placed in the rows of the new column. 
dataGridView1.Rows[0].Cells[C1_COL_NAME].Value = "Some text..."; 

Die ursprünglichen Datentabellenbindungen sollten noch vorhanden sein.

Verwandte Themen