2017-04-17 167 views
1

在下面的例子中,我用一些数据填充gridview。一切都很好,但我不知道如何设置列宽。 gridview没有任何设置列,所以我不能使用ItemStyle-Width。我尝试使用GridViewClicks_RowDataBound,但e.Row.Cells[i].Width不起作用,即使e.Row.Cells[i].Height确实有效。设置gridview列的宽度?

我也尝试在page_load中设置column.ItemStyle.Width,但也不起作用。

基本上,我需要设置gridview的列宽而不在标记中添加列。

任何帮助表示赞赏。

谢谢。

这里的标记:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <style type="text/css"> 
     .GridDock 
     { 
      overflow-x: auto; 
      width: calc(100% - 480px); 
      padding: 0 0 17px 0; 
     } 
    </style> 
    <script type="text/javascript"> 

     $('#dvGridWidth').width($('#dvScreenWidth').width()); 

    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <div style="width: 300px; height: 300px; display:inline-block; vertical-align:top"> 
      <asp:Button ID="Button1" runat="server" Width="278px" Text="Button" /> 
     </div> 
     <div style="width: 160px; height: 160px; display:inline-block;vertical-align:top"> 
      <asp:Button ID="Button2" runat="server" Width="140px" Text="Button" /> 
     </div> 
     <div style="display:inline-block;" class="GridDock" id="dvGridWidth"> 
      <asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridViewClicks_RowDataBound"> 
      </asp:GridView> 
     </div> 
    </div> 
    </form> 
</body> 
</html> 

而隐藏代码:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 

namespace ToErase 
{ 
    public partial class Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      DataTable gridDataDataTable = new DataTable(); 
      gridDataDataTable.Columns.Add("ID"); 
      gridDataDataTable.Columns.Add("Name"); 
      gridDataDataTable.Columns.Add("Address1"); 
      gridDataDataTable.Columns.Add("Address2"); 
      gridDataDataTable.Columns.Add("Address3"); 
      gridDataDataTable.Columns.Add("City"); 
      gridDataDataTable.Columns.Add("Zip"); 
      gridDataDataTable.Columns.Add("Province"); 
      gridDataDataTable.Columns.Add("Country"); 
      gridDataDataTable.Columns.Add("Sex"); 
      gridDataDataTable.Columns.Add("SNo"); 
      gridDataDataTable.Columns.Add("TelNo"); 
      gridDataDataTable.Columns.Add("FaxNo"); 
      gridDataDataTable.Columns.Add("MobileNo"); 
      gridDataDataTable.Columns.Add("VehicleNo"); 
      gridDataDataTable.Columns.Add("Color"); 
      gridDataDataTable.Columns.Add("Height"); 
      gridDataDataTable.Columns.Add("Weight"); 
      gridDataDataTable.Columns.Add("Company"); 
      gridDataDataTable.Columns.Add("CompanyAddress"); 
      gridDataDataTable.Columns.Add("CompanyTelNo"); 
      gridDataDataTable.Columns.Add("CompanyFaxNo"); 

      gridDataDataTable.Rows.Add("1", "Ryan", "City Stree1", "City Stree2", "City Stree1", "Barcelona", "232232", "N/A", "Spain", "Male", "S23343", "2223-232323-22", "2223-232323-22", "2223-232323-22", "2223-232323-22", "Red", "80cm", "75kg", "Lockheed Martin", "City Street3", "800-536145", "800-142587"); 
      gridDataDataTable.Rows.Add("2", "Ryan", "City Stree1", "City Stree2", "City Stree1", "Barcelona", "232232", "N/A", "Spain", "Male", "S23343", "2223-232323-22", "2223-232323-22", "2223-232323-22", "2223-232323-22", "Red", "80cm", "75kg", "Lockheed Martin", "City Street3", "800-536145", "800-142587"); 
      gridDataDataTable.Rows.Add("3", "Ryan", "City Stree1", "City Stree2", "City Stree1", "Barcelona", "232232", "N/A", "Spain", "Male", "S23343", "2223-232323-22", "2223-232323-22", "2223-232323-22", "2223-232323-22", "Red", "80cm", "75kg", "Lockheed Martin", "City Street3", "800-536145", "800-142587"); 

      GridView1.DataSource = gridDataDataTable; 
      GridView1.DataBind();  
      /* The following code does not affect grid columns */     
      foreach (DataControlField column in GridView1.Columns) 
      { 
       column.ItemStyle.Width = Unit.Pixel(400); 
      } 

     } 
     protected void GridViewClicks_RowDataBound(object sender, GridViewRowEventArgs e) 
     { 
      if (e.Row.RowType == DataControlRowType.DataRow) 
      { 
       DataRowView drv = e.Row.DataItem as DataRowView; 

       for (int i = 0; i < drv.Row.ItemArray.Length; i++) 
       { 
        e.Row.Cells[i].Width = 200; // The width is not being set to 200px 
        e.Row.Cells[i].Height = 200; // This works, I can set the height 
       } 
      } 
     } 
    } 
} 
+0

可能是重复的,看看这个:http://stackoverflow.com/a/2740947/5418068 – PJS

+0

它不是重复的。这正是我以前测试过的代码无效的代码。我在我的问题中提到了这一点,并包含了完全相同问题中的代码。 – rbhat

回答

2

你可以添加一个CSS类(房产),以你的GridView,并在浏览器中的GridView呈现为一个表,你可以设计/根据需要指定表格。

添加CSS样式说:

table{ 
    border: 1px solid black; 
    table-layout: fixed; 
    width: 200px; 
} 

th, td { 
    border: 1px solid black; 
    width: 100px; 
} 

@Runtime使用的GridView的RowDataBound事件改变宽度: EX:

protected void DataGrid_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    e.Row.Cells[0].Width = new Unit("width-in-px"); 
    e.Row.Cells[1].Width = new Unit("width-in-px"); 
    ...... 
} 
  • 你也可以算在GridView列并循环上面的宽度相同
+0

感谢您的回复。 200px的宽度是什么?我刚刚添加了这个css,并将'RowDataBound'中的'e.Row.Cells [i] .Width'改为400px,宽度设置为400px。 – rbhat

+0

但是,如果我删除它们中的任何一个(您发布的css或'RowDataBound'中的'e.Row.Cells [i] .Width',并且它不能正确显示。似乎它需要两个,但我不是确定在哪里可以看到来自CSS的200px – rbhat

+0

就好像CSS中的'width'值无关紧要,但该属性和'table-layout'需要在那里,所以'e.Row.Cells [i ] .Width' works。Does that sound sound? – rbhat