2010-01-04 70 views
0

我有一個DataRepeater與GridView裏面顯示一些存儲過程中的表。GridView內部中繼器列寬

這裏是我的中繼器代碼:

<asp:Repeater ID="rptResults" runat="server" OnItemDataBound="rptResults_ItemDataBound"> 
    <ItemTemplate> 
     <div style="width: 1100px; overflow: scroll;"> 
      <asp:GridView ID="gvResults" runat="server" BackColor="LightGoldenrodYellow" BorderColor="Tan" 
       BorderWidth="1px" CellPadding="2" ForeColor="Black" GridLines="None"> 
       <FooterStyle BackColor="Tan" Wrap="false" /> 
       <RowStyle Wrap="false" /> 
       <PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" HorizontalAlign="Center" 
        Wrap="false" /> 
       <SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" Wrap="false" /> 
       <HeaderStyle BackColor="Tan" Font-Bold="True" Wrap="false" /> 
       <AlternatingRowStyle BackColor="PaleGoldenrod" Wrap="false" /> 
      </asp:GridView> 
      <asp:Label runat="server" ID="lblNoRecords" Visible="false"></asp:Label> 
     </div> 
     <br /> 
    </ItemTemplate> 
</asp:Repeater> 

我有我的中繼器綁定:

protected void rptResults_ItemDataBound(object sender, RepeaterItemEventArgs e) 
     { 
      if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
      { 
       var o = e.Item.DataItem as DataTable; 
       if (o.Rows.Count == 0) 
       { 
        var lblNoRecords = (Label) e.Item.FindControl("lblNoRecords"); 
        lblNoRecords.Text = "No Records"; 
        lblNoRecords.Visible = true; 
       } 
       else 
       { 
        var gv = (GridView)e.Item.FindControl("gvResults"); 
        gv.DataSource = o; 

        gv.DataBind();  
       } 

      } 
     } 

rptResults.DataSource = results.Tables; 
    rptResults.DataBind(); 

我已經在我的GridView的每個表結合以下返回的數據可能會改變,因爲它是一個存儲過程,它總是會返回n個表。

我想嘗試根據返回的數據讓我的列自動調整大小。現在它會壓縮大部分數據,包括日期/時間數據。

我似乎無法弄清楚如何做到這一點。

想法?

回答

2

對不起,如果這是不相關的,但我在你的問題的行之間閱讀,並想知道如果你只是想獲得某些列(如你的日期/時間列)不包裝他們的內容,從而推遲換行到其他列(如文本列)?瀏覽器通常會嘗試優化佈局HTML表格。如果您想要某些列不包裝,可以使用CSS white-space: nowrap屬性。

在使用的ItemTemplate一個GridView,有一個裹=「假」的屬性:

​​

如果要使用自動生成的列,你將不得不處理每個生成的GridView相應的事件然後在代碼隱藏中設置屬性。喜歡的東西:

protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    e.Row.Cells[2].Attributes.Add("style", "white-space: nowrap;"); 
} 

很明顯,你首先需要確定是否綁定列的數據是要禁止包裝的類型。

以上是最壞的情況;你可能會放棄處理那些不會發生太多事件的事件(每列可能),但我不確定這是否適合你的情況。

如果您希望整個表都不能換行,那麼只需在頁面上爲所有table.tr.td元素設置CSS屬性即可。

+0

你的第二部分工作就像一個魅力什麼工作!謝謝!! – CodeLikeBeaker 2010-01-04 21:51:07

0

這對我來說

<asp:GridView ID="SomeGridView" CssClass="gridtext" > 

.gridtext 
{ 
    white-space: nowrap; 
} 

.gridtext table 
{ 
    white-space: nowrap; 
} 
.gridtext tr 
{ 
    white-space: nowrap; 
} 
.gridtext td 
{ 
    white-space: nowrap; 
} 

.gridtext th 
{ 
    white-space: nowrap; 
}