Compartilhar via


Como: conjunto largura da coluna GridView controle de servidor Web dinamicamente

Por padrão, colunas no controle GridView são dimensionadas automaticamente.Colunas processam como células de tabelas HTML (elementos td) sem informações de largura; a maioria dos navegadores dimensionam células de tabelas para permitir o conteúdo mais largo na coluna.

Se for necessário, você pode definir a largura de colunas individuais no controle GridView por meio de programação.Isso é útil, se a largura da coluna depender de informações que estão disponíveis somente em tempo de execução.Por exemplo, você pode dimensionar uma coluna de acordo com o seu conteúdo — isto é, com base nos dados aos quais o controle GridView é vinculado.

A técnica básica para definir a largura da coluna envolve a configuração da propriedade Width de um modelo de coluna.Se você desejar que a largura seja definida de acordo com seu conteúdo, você pode manipular o evento RowDataBound.Isso torna os dados para uma linha disponíveis a você para exame.

Para definir a largura da coluna dinamicamente

  • No código, defina a propriedade Width da propriedade ItemStyle de uma coluna do controle GridView para a largura desejada.

    O exemplo de código a seguir mostra como definir a largura de todas as colunas no controle GridView1 para o valor que um usuário insere em uma caixa de texto.

    Protected Sub Button1_Click(ByVal sender As Object, _
            ByVal e As System.EventArgs)
        Try
          Dim colWidth As Integer
          colWidth = CInt(Server.HtmlEncode(TextBox1.Text))
          If colWidth > 0 Then
            For i As Integer = 0 To GridView1.Columns.Count - 1
              GridView1.Columns(i).ItemStyle.Width = colWidth
            Next
          End If
        Catch
          ' Report error.
        End Try
    End Sub
    
    protected void Button1_Click(object sender, EventArgs e)
    {
        try
        {
          int colWidth = Int16.Parse(Server.HtmlEncode(TextBox1.Text));
          if (colWidth > 0)
          {
            for (int i = 0; i < GridView1.Columns.Count; i++)
            {
              GridView1.Columns[i].ItemStyle.Width = colWidth;
            }
          }
        }
        catch
        {
          // Report error.      
        }
    }
    

Para definir a largura da coluna com base no conteúdo de dados

  1. Crie um manipulador para o evento RowDataBound.

    O evento RowDataBound é gerado sempre que uma nova linha é ligada a dados na grade e lhe oferece acesso aos dados de cada linha.

  2. No manipulador de eventos, faça o seguinte:

    1. Crie um objeto DataRowView e atribua a ele o valor DataItem para a linha de grade atual.

      A propriedade DataItem é digitada como um objeto.Portanto, você deve convertê-lo.

    2. Teste uma linha de dados (DataControlRowType) para certificar-se que você está trabalhando com uma linha ligada a dados e não com um cabeçalho ou um rodapé.

    3. A partir do objeto DataRowView, extraia o valor dos dados que você deseja examinar.

    4. Defina a propriedade Width para a propriedade ItemStyle.

    5. Defina a propriedade Wrap da propriedade ItemStyle como false.

      Se a propriedade Wrap está false, a coluna é automaticamente redimensionada.

    O exemplo de código a seguir mostra como definir a largura de uma coluna (neste caso, a terceira coluna) com base na largura do maior elemento de dados da segunda coluna.O manipulador de eventos RowDataBound é chamado uma vez para cada linha de dados que é exibida pelo controle GridView.O código armazena o número de caracteres do maior elemento em um membro de página protegido.O código define a largura da coluna para o número de caracteres multiplicado por 30 (um multiplicador arbitrário).

    Protected widestData As Integer
    Protected Sub GridView1_RowDataBound(ByVal sender As Object, _
            ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
        Dim drv As System.Data.DataRowView
        drv = CType(e.Row.DataItem, System.Data.DataRowView)
        If e.Row.RowType = DataControlRowType.DataRow Then
          If drv IsNot Nothing Then
            Dim catName As String = drv(1).ToString()
            Dim catNameLen As Integer = catName.Length
            If catNameLen > widestData Then
              widestData = catNameLen
              GridView1.Columns(2).ItemStyle.Width = _
                  widestData * 30
              GridView1.Columns(2).ItemStyle.Wrap = False
            End If
          End If
        End If
    End Sub
    
    Protected Sub Page_Load(ByVal sender As Object, _
            ByVal e As System.EventArgs) Handles Me.Load
        widestData = 0
    End Sub
    
    protected int widestData;
    protected void GridView1_RowDataBound(object sender, 
        GridViewRowEventArgs e)
    {
        System.Data.DataRowView drv;
        drv = (System.Data.DataRowView)e.Row.DataItem;
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
          if (drv != null)
          {
            String catName = drv[1].ToString();
            Response.Write(catName + "/");
    
            int catNameLen = catName.Length;
            if (catNameLen > widestData)
            {
              widestData = catNameLen;
              GridView1.Columns[2].ItemStyle.Width =
                widestData * 30;
              GridView1.Columns[2].ItemStyle.Wrap = false;
            }
    
          }
        }
    }
    
    protected void Page_Load(object sender, EventArgs e)
    {
        widestData = 0;
    }
    

Consulte também

Referência

Visão Geral sobre o Controle do Servidor Web GridView