2016-04-01 5 views
1

Ich versuche, Bericht zu erstellen, und es kann in DataGridView anzeigen. Ich verwende einen einfachen Code, um die Werte anzuzeigen.C# Windows Form - Zeige ersten Wert nur mit doppeltem Wert in DataGridView

Hier ist mein Code, wenn die Ansicht Taste klicken:

belreport.DailyReport = Convert.ToDateTime(date_day_Daily.Text).ToString("yyyy-MM-dd"); 

DataTable table = balreport.ViewDailyRecord(belreport); 

dgv_daily.DataSource = table; 

Hier ist mein Code, um die Daten aus der Tabelle in der Datenbank für die Anzeige:

// START Executing to view the data 
public DataTable ViewDailyRecord(BELReport belreport) { 
    SqlCommand cmd = new SqlCommand(); 
    cmd.Connection = dbcon.getcon(); 
    cmd.CommandType = CommandType.Text; 
    cmd.CommandText = "SELECT * FROM table WHERE [email protected]"; 
    cmd.Parameters.AddWithValue("@Date",belreport.DailyReport); 

    SqlDataReader dr = cmd.ExecuteReader(); 
    DataTable table = new DataTable(); 
    table.Load(dr); 

    return table; 
} 

In meinem Tisch kann der Wert seines Duplikat aber sie haben eine eindeutige Kennung. Was ich versuche zu tun, so etwas wie dieses

Wenn es doppelte oder mehrfachen Wert des Identifiers, alles, was Sie die erste Kennung sehen und technischen Eigenschaften und Menge sind (Da sieht der Identifier mehrere, ich will loszuwerden, um es zu bekommen)

Vielen Dank im Voraus

+0

Was ist mit der Gruppierung von Identifikatoren? Was wird dein erwartetes Ergebnis sein? –

+0

Sie meinen die distinct in meiner Abfrage? –

+0

Nein. Gruppieren nach Bezeichner –

Antwort

2

DataGridView hat keine eingebaute Unterstützung Reihen in Gruppen zu zeigen. Für Reporting-Zwecke ist es besser, Reporting-Tools wie rdlc Bericht zu verwenden.

Aber wenn das Ergebnis, das im Bild angezeigt wird ein akzeptables Ergebnis ist, können Sie das Aussehen erreichen durch den Umgang mit CellFormatting Ereignisse und formatierte Wert jeder Zelle Einstellung, basierend auf vorherige Zelle in der Spalte:

void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
{ 
    //I suppose the group column is column at index 0 
    if (e.ColumnIndex == 0 && e.RowIndex > 0) 
    { 
     if (dataGridView1[0, e.RowIndex].Value == dataGridView1[0, e.RowIndex - 1].Value) 
      e.Value = ""; 
    } 
} 

Hier ist ein Beispiel für die Ausgabe:

enter image description here

es selbst zu testen:

private void Form1_Load(object sender, EventArgs e) 
{ 
    var dt = new DataTable(); 
    dt.Columns.Add("C1", typeof(string)); 
    dt.Columns.Add("C2", typeof(string)); 

    dt.Rows.Add("1", "11"); 
    dt.Rows.Add("2", "21"); 
    dt.Rows.Add("3", "31"); 
    dt.Rows.Add("1", "12"); 
    dt.Rows.Add("2", "22"); 
    dt.Rows.Add("3", "32"); 
    dt.Rows.Add("1", "13"); 
    dt.Rows.Add("2", "23"); 

    this.dataGridView1.DataSource = dt; 
    this.dataGridView1.Sort(this.dataGridView1.Columns[0], ListSortDirection.Ascending); 
    foreach (DataGridViewColumn column in this.dataGridView1.Columns) 
    { 
     column.SortMode = DataGridViewColumnSortMode.NotSortable; 
    } 

    this.dataGridView1.CellFormatting += dataGridView1_CellFormatting; 
} 
+0

Es funktioniert nicht –

+0

Der Screenshot hat von der Ausführung eines Beispiels genommen. Ich füge die restlichen Codes hinzu. –

+0

Okay lass mich das Ganze ausprobieren :) –