我現在動態綁定DataGrid,
代碼如下;
Private Sub DataGridBind(Optional ByVal PageIndex As Int32 = 0)
     Me.dataGrid1.Columns.Add(CreateBoundColumn(arrlistSelectedColumns(i).Value, arrlistSelectedColumns(i).Text))
end subFunction CreateBoundColumn(ByVal DataFieldValue As String, ByVal HeaderTextValue As String) As BoundColumn
           
            Dim column As BoundColumn = New BoundColumn
            
            column.DataField = DataFieldValue
            column.HeaderText = HeaderTextValue
            
     Return column
End Function
但是我不知道有什麼辦法才能是動態生成的列大小固定,也就是說列寬不隨數據的長度的改變而改變,幫幫我吧

解决方案 »

  1.   

    e.Item.Cells[0].Width = ........?
      

  2.   

    设置Wrap属性为false或者固定其寬度...........
      

  3.   

    Function CreateBoundColumn(ByVal DataFieldValue As String, ByVal HeaderTextValue As String) As BoundColumn
               
                Dim column As BoundColumn = New BoundColumn
                
                column.DataField = DataFieldValue
                column.HeaderText = HeaderTextValue
                column.HeaderStyle.Width = 100
         Return column
    End Function
      

  4.   

    建議你用TemplateColumn,在它下面加label來輸出固定長度
      

  5.   

    将HeaderStyle中的Wrap属性设置为false
      

  6.   

    可以强行换行
    <%@ Page Language="C#" AutoEventWireup="True" %>
    <%@ Import Namespace="System.Data" %>
    <html>
       <script runat="server">
          int start_index;
          ICollection CreateDataSource() 
          {
             DataTable dt = new DataTable();
             DataRow dr;         dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
             dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
             dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double)));
     
             for (int i = start_index; i < start_index + ItemsGrid.PageSize; i++) 
             {
                dr = dt.NewRow();            dr[0] = i;
                dr[1] = "我是中文我是中文我.2354561531f1a sdf 3sd153 ds1g3 1sd是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文我是中文sdfdsfdsfsd我是中文我是中文我是中文";
                dr[2] = 1.23 * (i+1);            dt.Rows.Add(dr);
             }         DataView dv = new DataView(dt);
             return dv;
          }      void Page_Load(Object sender, EventArgs e) 
          {
           ItemsGrid.Attributes.Add("style","word-break:keep-all;word-wrap:normal");        
             if (!IsPostBack)
             {
             BindGrid();  
             }
                
          }      void BindGrid() 
          {
             ItemsGrid.DataSource=CreateDataSource();
             ItemsGrid.DataBind();     
          }
          
       void Item_Created(Object sender, DataGridItemEventArgs e) 
       {
          if( e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            e.Item.Cells[1].Text = "<nobr>" + e.Item.Cells[1].Text + "</nobr>"; 
       }   </script>
    <body>
       <form runat="server">
          <asp:DataGrid id="ItemsGrid" runat="server"
               BorderColor="black"
               OnItemDataBound="Item_Created"
               AutoGenerateColumns="false">         <PagerStyle NextPageText="Forward"
                         PrevPageText="Back"
                         Position="Bottom"
                         PageButtonCount="5"
                         BackColor="#00aaaa">
             </PagerStyle>         <AlternatingItemStyle BackColor="yellow">
             </AlternatingItemStyle>         <HeaderStyle BackColor="#00aaaa">
             </HeaderStyle>         <Columns>
          
                <asp:BoundColumn HeaderText="Number" 
                     DataField="IntegerValue"/>            <asp:BoundColumn
                     HeaderText="Item" 
                     DataField="StringValue"/>            <asp:BoundColumn 
                     HeaderText="Price" 
                     DataField="CurrencyValue" 
                     DataFormatString="{0:c}">               <ItemStyle HorizontalAlign="right">
                   </ItemStyle>
                   </asp:BoundColumn>
             </Columns>      
          </asp:DataGrid>
       </form>
    </body>
    </html>
      

  7.   

    DataGrid如何动态设置列宽,分别包括数据绑定和动态生成列两种情况的列宽设置?win form:
    DataGridTableStyle dgts = new DataGridTableStyle();
    dgts.MappingName = "News";
    dGridNews.TableStyles.Add(dgts);
    DataGridTableStyle tableStyle = dGridNews.TableStyles["News"];
    tableStyle.GridColumnStyles[1].Width =300;web form:
      width = 25%
    7.DataGrid需要动态帮定不同的列,如何控制他的列宽?----if(e.Item.ItemType==ListItemType.Header)
         for(int i=0,j=e.Item.Cells.Count;i<j;i++){
    e.Item.Cells[i].Width=System.Web.UI.WebControls.Unit.Pixel(20);
         } ---  DataGrid1.Columns(9).HeaderStyle.Width = Unit.Pixel(100)
    =========================
    以上的方法 都是在你的表格中的内容不会超出表格宽度的情况下起作用 ,因为如果你输了很多sssssss会把你的表格称大 ,所以你可以通过强行换行实现 ,如果你设表格宽度为10 肯定不够。
      

  8.   

    就是将HeaderStyle中的Wrap属性设置为false
    楼主试了没有
      

  9.   

    html中总是显示<td nowrap=true>,为什么阿?
      

  10.   

    你照我提供的例子作了吗注意:
    以上的方法 都是在你的表格中的内容不会超出表格宽度的情况下起作用 ,因为如果你输了很多sssssss会把你的表格称大 ,所以你可以通过强行换行实现 ,如果你设表格宽度为10 肯定不够。
      

  11.   

    你在仔細檢查一下代碼,會不會你在某處強制加了nowrap=true,導致無法換行.
      

  12.   

    问题解决了,谢谢大家的鼎力帮助,特别要谢谢goody9807() 和2bno1