2015-10-16 35 views
0

我有一個asp.net GridView,並在其中包含一些BoundFields。從代碼中動態改變BoundField中的屬性

<asp:BoundField ReadOnly="True" HeaderText="ID" DataField="ID" SortExpression="ID"></asp:BoundField> 
<asp:BoundField ReadOnly="True" HeaderText="Description" DataField="description" ItemStyle-Wrap="true" ItemStyle-Width="300px" SortExpression="ID"></asp:BoundField> 

說明字段中的文本可以是任何長度的,所以現在我已經設置了列只是300像素寬,並在必要時自動換行。

但我想實現的寬度是自動設置的位置,就像在正常的BoundField 直到它達到300px的寬度。之後,我希望它環繞。

我想在DataBound事件期間試圖實現這一點,我可以在這裏查看添加到表中的每個字符串的長度。如果達到一定的長度,我會將ItemStyle-Width屬性添加到BoundField。

問題是BoundFields沒有給出ID,所以我不能在後面的代碼中改變屬性的常規方式。我想通過瀏覽GridView的ID可以獲得這些屬性,但我不確定在哪裏添加屬性。

+0

我認爲用CSS管理更好。 – CurseStacker

+0

@CurseStacker,我將如何去給那個BoundField一個正確的CSS類或樣式標記?再次,我無法通過ID訪問它。也許我可以給它一個自定義的類,並從後面的代碼中更改樣式表上的內容?簡單看看谷歌後,我不認爲我可以從後面的代碼編輯樣式表。 – G3n0c1de

回答

2

我想通了。

我最終使用文本的字體和大小來測量字符串的寬度。

我發現了一個特別有用的鏈接here。輔助類使得生成SizeF對象變得容易。我製作了一個名爲width300px的自定義CSS類width: 300px

這裏是我的背後代碼:

protected void myGridViewRowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) 
{ 

    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 

     Font stringFont = new Font("Times New Roman", 12); 
     SizeF stringSize = new SizeF(); 
     string description = e.Row.Cells[1].Text; 

     stringSize = GraphicsHelper.MeasureString(description, stringFont); 

     if (stringSize.Width > 300) 
     { 

      gridViewWallsList.Columns[2].ItemStyle.CssClass = "width300px"; 

     } 

    } 

} 

最重要的部分在塔的ItemStyle財產得到。如果沒有ID,我必須記得更改列索引,如果我在它之前添加更多的列,但這是有效的。