2013-10-09 142 views
2

我很麻煩!自動生成的Gridview - 更改列寬

我生成了很多gridviews dinamically,與列的值dinamic。 列是永遠相同的。

我想知道如何設置這個列的大小。

這是我的代碼,我的努力。

private void generateControls(List<List<DataRow>> grids) 
    { 
     DataTable dt = new DataTable(); 

     int i = 0; 
     foreach (List<DataRow> lst in grids) 
     { 
      dt = lst.CopyToDataTable(); 

      GridView grv = new GridView(); 
      grv.AlternatingRowStyle.BackColor = System.Drawing.Color.FromName("#cccccc"); 
      grv.HeaderStyle.BackColor = System.Drawing.Color.Gray; 

      grv.Width = new Unit("100%"); 
      //grv.RowStyle.Wrap = false; 
      grv.RowStyle.Width = new Unit("100%"); 

      grv.ID = "grid_view" + i; 
      grv.DataSource = dt; 
      grv.DataBind(); 

      /* grv.Columns[0].ItemStyle.Width = new Unit("5%"); 
      grv.Columns[1].ItemStyle.Width = new Unit("7%"); 
      grv.Columns[2].ItemStyle.Width = new Unit("12%"); 
      grv.Columns[3].ItemStyle.Width = new Unit("12%"); 
      grv.Columns[4].ItemStyle.Width = new Unit("7%"); 
      grv.Columns[5].ItemStyle.Width = new Unit("7%"); 
      grv.Columns[6].ItemStyle.Width = new Unit("23%"); 
      grv.Columns[7].ItemStyle.Width = new Unit("22%"); 
      grv.Columns[8].ItemStyle.Width = new Unit("5%");*/ 

      Label lblBlankLines = new Label(); 
      lblBlankLines.Text = "<br />"; 

      Panel panelGrid = new Panel(); 
      panelGrid.ID = "panel_grid" + i; 


      Label lblTipo = new Label(); 
      string tipoOcorrencia = lst[0]["Ocorrência"].ToString(); 

      /* 
      * Capitalized 
      * TextInfo myTI = new CultureInfo("pt-BR", false).TextInfo; 

      string novoTipoOcorrencia = myTI.ToTitleCase(tipoOcorrencia);*/ 

      int quantidade = lst.Count; 
      lblTipo.Text = " - " + tipoOcorrencia + ": " + quantidade; 


      LinkButton lkBtn = new LinkButton(); 
      lkBtn.ID = "link_button" + i; 
      lkBtn.Text = "Exibir | Ocultar"; 
      lkBtn.Attributes["onClick"] = "javascript:return ocultaGrid('" + panelGrid.ID + "'), false"; 

      panel_status.Controls.Add(lblBlankLines); 
      panel_status.Controls.Add(lkBtn); 
      panel_status.Controls.Add(lblTipo); 


      panelGrid.Controls.Add(grv); 

      panel_status.Controls.Add(panelGrid); 

      panel_status.DataBind(); 

      i++; 
     } 
    } 

我已經嘗試獲取列,但我得到一個錯誤,告訴我一個無效的索引訪問。 我該如何訪問我的GridView中的列?

+0

string tipoOcorrencia = lst [0] [「Ocorrência」]。ToString();我不會在編程中使用像這樣的「ê」字符。將其改爲簡單的「e」並查看會發生什麼。 – WozzeC

+0

另外,請確定哪一行出現錯誤。 – WozzeC

回答

4

使用的RowDataBound事件處理程序:

想想你的指標,並確保你沒有試圖訪問一個不存在的列也是如此。

見鏈路中的示例:

http://msdn.microsoft.com/en-us/library/ms178296(v=vs.100).ASPX

grv.RowDataBound + = grv_RowDataBound;

private void grv_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 

     if (e.Row.RowType == DataControlRowType.Header) 
     { 

        e.Row.Cells[0].Width = new Unit("5%"); 
        e.Row.Cells[1].Width = new Unit("7%"); 
        e.Row.Cells[2].Width = new Unit("12%"); 
        e.Row.Cells[3].Width = new Unit("12%"); 
        e.Row.Cells[4].Width = new Unit("7%"); 
        e.Row.Cells[5].Width = new Unit("7%"); 
        e.Row.Cells[6].Width = new Unit("23%"); 
        e.Row.Cells[7].Width = new Unit("22%"); 
        e.Row.Cells[8].Width = new Unit("5%"); 
     } 

    } 
+0

它的作品!你真的救了我的一天! 只是爲了改進,如果您已將任何值設置爲「grv.RowStyle.Width」,則必須將其刪除才能正常工作。 =) – guisantogui