2015-07-08 53 views
6

Tôi có GridView này hiển thị hai bảng cùng nhau (với phương pháp hợp nhất). Tôi muốn thay đổi màu của hàng của hàng 0 và hàng 11. Tôi biết rằng tôi có thể làm điều đó với sự kiện liên kết dữ liệu hàng nhưng tôi không biết cách chọn các hàng trên thời gian chạy. enter image description hereThay đổi màu hàng của GridView ASP.NET

Mã sau của tôi.

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) 
    //{ 
    // 
    //} 
} 

mã CSS của tôi

.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

thay đổi phong cách nên được thực hiện với css – DLeh

+0

Tôi đã thực hiện một số thay đổi với css, vâng .. nhưng tôi nghĩ rằng đó là dễ dàng hơn này với C# Tôi có thể hiển thị cá tuyết css của tôi e bởi vì tôi không biết làm thế nào để làm điều đó anyway @DLeh –

+0

Giống như bất kỳ công việc, bạn nên sử dụng ngôn ngữ thích hợp. Logic kinh doanh nên được thực hiện trong C# và kiểu dáng front-end nên được thực hiện trong css. Trộn nó lên và bạn sẽ bị đau đầu nếu có vấn đề nảy sinh. Tôi khuyên bạn nên hiển thị cho chúng tôi mã css có liên quan của bạn cho bảng. –

Trả lời

2

Một ví dụ trong mã

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; 
     } 
    } 
} 

Tôi hy vọng giúp bạn.

+0

Nó làm việc cho tôi! Cảm ơn bạn! quá dễ dàng;) @Nacho –

+0

@MaraPimentel bạn được chào đón! Tôi hy vọng tôi đã có ích! – Nacho

1

Trước tiên, bạn có thể chọn hoặc có một cách khác để thực hiện điều này, đây chỉ là một cách để làm điều đó, và có lẽ bạn có thể mã giải pháp khác dựa trên này:

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

Chỉ cần làm điều này sau khi DataBind của bạn .

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

Không cần sự kiện RowDataBound.

1

Bạn sắp hoàn tất, sau đó bạn dừng lại.

Một trong các phương pháp này sẽ hoạt động.

  1. Sử dụng các chỉ số liên tiếp:

    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. Sử dụng văn bản của hàng (thay thế các phiên bản tiếng Anh tôi có với tương đương tiếng Tây Ban Nha của bạn):

    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; 
         } 
        } 
    } 
    
Các vấn đề liên quan