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
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.
No manipulador de eventos, faça o seguinte:
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.
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é.
A partir do objeto DataRowView, extraia o valor dos dados que você deseja examinar.
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; }