2015-07-08 12 views
6

Ich habe diese Gridview, die zwei Tabellen zusammen zeigt (mit Merge-Methode). Ich möchte die Farbe der Reihe der Reihe 0 und der Reihe 11 ändern. Ich weiß, dass ich es mit dem Zeilendatengebundenen Ereignis tun kann, aber ich kann nicht die Reihen zur Laufzeit wählen. enter image description hereÄndern Sie die Zeilenfarbe von gridview ASP.NET

Mein Code-hinter.

public void mergetbl(DataTable DocVisTbl, DataTable cobtable) 
{ 

    DataTable mergetable = DocVisTbl.Copy(); 
    mergetable.Merge(cobtable); 

    DataRow row; 
    row = mergetable.NewRow(); 
    row["Stakeholder"] = "Número de Médicos"; 
    mergetable.Rows.InsertAt(row, 0); 
    row = mergetable.NewRow(); 
    row["Stakeholder"] = "Médicos Visitados"; 
    mergetable.Rows.InsertAt(row, 11); 


    DataTable mergetable_Clone = mergetable.Clone(); //just copy structure, no data 

    for (int i = 0; i < mergetable_Clone.Columns.Count; i++) 
    { 
     if (mergetable_Clone.Columns[i].DataType != typeof(string)) 
      mergetable_Clone.Columns[i].DataType = typeof(string); 
    } 

    foreach (DataRow datarow in mergetable.Rows) 
    { 
     mergetable_Clone.ImportRow(datarow); 

    } 

    for (int x = 1; x < mergetable_Clone.Columns.Count; x++) 
    { 
     mergetable_Clone.Rows[4][x] = mergetable_Clone.Rows[4][x] + "%"; 
     mergetable_Clone.Rows[7][x] = mergetable_Clone.Rows[7][x] + "%"; 
     mergetable_Clone.Rows[10][x] = mergetable_Clone.Rows[10][x] + "%"; 
     mergetable_Clone.Rows[15][x] = mergetable_Clone.Rows[15][x] + "%"; 
     mergetable_Clone.Rows[18][x] = mergetable_Clone.Rows[18][x] + "%"; 
     mergetable_Clone.Rows[21][x] = mergetable_Clone.Rows[21][x] + "%"; 

    } 
    MergeGrid.DataSource = mergetable_Clone; 
    MergeGrid.DataBind();   
} 

protected void MergeGrid_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    //if (e.Row.RowType == DataControlRowType.DataRow) 
    //{ 
    // 
    //} 
} 

Mein CSS-Code

.Grid { 
    width: auto; 
    background-color: #fff; 
    margin: 5px 0 10px 0; 
    border: solid 2px #525252; 
    border-collapse:collapse; } 

/*Gridview table data*/ 
.Grid td { 
    padding: 2px; 
    font-family: Calibri; 
    border: solid 1px #c1c1c1; 
    color: #000000; 
    text-align:right; 
    padding: 2px 4px 3px 4px;} 

/*Gridview table header*/ 
.Grid th { 
    padding: 4px 2px; 
    color: #fff; 
    font-family:Calibri; 
    background: #424242 url(Images/gridheader.png) repeat-x top; 
    border-left: solid 1px #525252; 
    font-size: 95%; } 

/*Gridview alternate rows*/ 
.Grid .alt { background: #fcfcfc url(Images/grid-alt.png) repeat-x top; } 
+1

Styling Änderungen sein sollte getan mit css – DLeh

+0

Ich machte einige Änderungen mit CSS, ja .. aber ich dachte, dass das einfacher war, dieses mit C# kann ich meinen css Kabeljau zeigen e weil ich nicht weiß, wie ich es trotzdem machen soll @DLeh –

+0

Wie bei jedem Job sollten Sie die entsprechende Sprache verwenden. Die Geschäftslogik sollte in C# erfolgen und das Front-End-Styling sollte in CSS erfolgen. Mischen Sie es und Sie werden Kopfschmerzen bekommen, wenn Probleme auftreten. Ich würde empfehlen, uns Ihren relevanten css Code für den Tisch zu zeigen. –

Antwort

2

Ein Beispiel im Code

protected void MergeGrid_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     if (e.Row.RowIndex == 0) //Select the row 
     { 
      e.Row.BackColor = System.Drawing.Color.FromArgb(255, 0, 0); 

      //or you can select the color 
      //e.Row.BackColor = System.Drawing.Color.Red; 
     } 
    } 
} 

Ich hoffe, dass Sie Hilfe.

+0

Es hat bei mir funktioniert! Vielen Dank! zu viel einfach;) @Nacho –

+0

@MaraPimentel du bist willkommen! Ich hoffe, ich war hilfreich! – Nacho

1

Erstens können Sie wählen oder einen anderen Weg dies zu tun haben, das ist nur ein Weg, es zu tun, und vielleicht könnten Sie eine andere Lösung basierend auf diesen Code:

protected void MergeGrid_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    //here you should have a way to identify which rows are you goingo to change 
    //I used the text in the first row 
    string[] rowsToColor = new[] { "Número de Médicos", "Médicos Visitados" }; 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     if (rowsToColor.Contains(e.Row.Cells[0].Text)) 
     e.Row.BackColor = System.Drawing.Color.Blue; //it is just an example color 
    } 
} 
1

Genau dies tun nach dem DataBind .

MergeGrid.DataBind(); 
MergeGrid.Rows[0].BackColor = 
    gvwSearch.Rows[11].BackColor = 
    System.Drawing.Color.Red; 

Keine Notwendigkeit für das Ereignis RowDataBound.

1

Sie waren fast da, dann haben Sie aufgehört.

Eine dieser Methoden würde funktionieren.

  1. den Zeilenindex verwenden:

    private const int ROW_00 = 0; 
    private const int ROW_11 = 11; 
    
    protected void MergeGrid_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
        if (e.Row.RowType == DataControlRowType.DataRow) 
        { 
         var index = e.Row.RowIndex; 
         if ((index == ROW_00) || (index == ROW_11)) 
         { 
          e.Row.BackColor = System.Drawing.Color.Aqua; 
         } 
        } 
    } 
    
  2. Verwenden der Text der Zeile (Ersetzen der englischen Versionen ich mit Ihren spanischen Äquivalent haben):

    private const string NUMERO_DE_MEDICOS = "Numero de Medicos"; 
    private const string MEDICOS_VISITADOS = "Medicos Visitados"; 
    
    protected void MergeGrid_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
        if (e.Row.RowType == DataControlRowType.DataRow) 
        { 
         var cell0 = e.Row.Cells[0].Text; 
         if ((cell0 == NUMERO_DE_MEDICOS) || (cell0 == MEDICOS_VISITADOS)) 
         { 
          e.Row.BackColor = System.Drawing.Color.Aqua; 
         } 
        } 
    }