2010-04-29 60 views
7

estoy Encuadernación una tabla a un gridview en asp.net como talCómo establecer un ancho de columna gridview cuando se une a una tabla de datos

grdIssues.DataSource = mdtIssues; 

grdIssues.DataBind(); 

El problema es que no puedo controlar entonces el ancho de columna, asp.net parece decidido por sí mismo qué anchura debe tener cada columna. Los métodos como

grdIssues.Columns[0].ItemStyle.Width = 100; 
grdIssues.Columns[1].ItemStyle.Width = 100; 

no funcionan porque las columnas se crean dinámicamente. No puedo creer que no haya una manera de hacer esto sin crear manualmente cada columna y llenar cada fila.

Respuesta

6

Usted no tiene que crear manualmente las columnas para ajustar la anchura de ellos, usted puede hacer esto

foreach (DataControlField column in OrdersGV.Columns) 
    { 
     column.ItemStyle.Width = Unit.Pixel(100); 
    } 
+0

esto falla para compilar recibo la excepción Error 'objeto' no contiene una definición para 'ItemStyl e 'y no se puede encontrar ningún método de extensión' ItemStyle 'que acepte un primer argumento de tipo' objeto '(¿falta una directiva using o una referencia de ensamblado?) –

+0

Solo edito la respuesta, inténtelo. Asegúrese de hacer esto después de vincular la cuadrícula de datos – alejandrobog

-1

me gustaría hacerlo de esta manera:

foreach (DataControlField field in grdIssues.Columns) 
{ 
    field.HeaderStyle.Width = 100; 
} 
+0

Esta compilación no funciona. Solo la columna que agregué manualmente, un botón, está en la colección de columnas. Bob –

+0

¿En qué evento está ejecutando el código? No puedes hacerlo en Page_Load. Usa el evento Databound de grdIssues. –

+0

el código anterior no funciona para mí también. ¿Cómo podemos manejar esto? –

0

me gusta responder a mi propia pregunta siempre que pueda para que los futuros usuarios que busquen el hilo encuentren la respuesta.

No pude encontrar la manera de hacer lo que quería directamente. Sin embargo, encontré que si definía las columnas yo mismo, podía cambiar las propiedades. En este ejemplo, quería centrar los datos de la columna. Algo como esto.

BoundField bdfRaisedDate = new BoundField(); 
clsUtilities.SetBoundFieldCenter(ref bdfRaisedDate, "RaisedDateShort", "Opened", "RaisedDate"); 

grdIssues.Columns.Add(bdfRaisedDate); 

grdIssues.DataSource = mdtIssues; 

grdIssues.DataBind(); 

public static void SetBoundFieldCenter(ref BoundField bdfAny, string pDataField, string pHeadingValue, string pSortExpression) 
{ 
     bdfAny.DataField = pDataField; 
     bdfAny.HeaderText = pHeadingValue; 
     bdfAny.SortExpression = pSortExpression; 
     bdfAny.HeaderStyle.HorizontalAlign = HorizontalAlign.Center; 
     bdfAny.ItemStyle.HorizontalAlign = HorizontalAlign.Center; 
} 
3

I fue capaz de cambiar la anchura de una Gridview columna determinada (unido a un Datatable) con el RowDataBound evento:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { 
    e.Row.Cells[0].Attributes["width"] = "200px"; 
} 
0

lo hice como:

gridView1.HeaderRow.Cells[0].Attributes["Width"] = "100px"; 
gridView1.HeaderRow.Cells[1].Attributes["Width"] = "50px"; 
gridView1.HeaderRow.Cells[2].Attributes["Width"] = "200px"; 
Cuestiones relacionadas