2017-04-17 118 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