2010-08-02 84 views
1

我創建了一個GridView,其列根據我的數據源動態創建。其中一列是一個狀態字段,根據數據庫中的狀態字段顯示是否?圖像。ASP中的動態更改:GridView列

<asp:TemplateField HeaderText="Status">                 
    <ItemTemplate> 
    <asp:Image runat="server" ImageAlign="Middle" ID="imgStatus" ImageUrl= '<%# "/images/actions/" + ((Convert.ToInt32(Eval("StatusFlag")) == 0) ? "actionInActive.gif" : "actionActive.gif") %>' ToolTip='<%# ((Convert.ToInt32(Eval("StatusFlag")) == 0) ? "No" : "Yes") %>' /> 
    </ItemTemplate> 
    <ItemStyle HorizontalAlign="Center" Width="40px"/> 
</asp:TemplateField> 

但是,表格中每一行的顯示狀態都會在頁面上產生大量的視覺噪音。因此,如果頁面上有更多條目,並且如果條目數量很少,則顯示[是/否]圖標,而不是此方法,我只想顯示「是」狀態。

任何人都可以提供一些建議,如何實現這一目標?

謝謝!

回答

1

我能理解你的問題是你想要兩件東西

*)。如果沒有記錄,那麼你想在每一行中顯示兩件事,一件是狀態圖像和狀態。

*)。如果有很多記錄,那麼你只想顯示狀態文本而不是圖像。

如果我是正確的,然後解決方案是在這裏:

在ItemTemplate中的圖像和HTML標籤添加兩個控制,並根據情況改變自己的Visibility.Like你有這樣的

<asp:TemplateField HeaderText="Status"> 
    <ItemTemplate> 
     <asp:Image Visible='<%# Check(Convert.ToString(Eval(Image))) %>' ID="img" runat="server" ImageUrl='<% Eval(Image) %>' /> 
     // for ImageUrl, you can put more condition for 'yes' and 'no' image. 
     <asp:Label Visible='<%# Check(Convert.ToString(Eval(Image))) %>' ID="status" Text='<% Eval(Status) %>' runat = "server" /> 
    </ItemTemplate> 
</asp:TemplateField> 

現在,在您的數據源根據你的需要做一些改變...... 關於綁定,你會決定你想要顯示圖像的天氣,否則將數據源的圖像值更新爲'#'。現在檢查(字符串IMAGEURL)的背後是函數的代碼

public bool Check(string title) 
    { 
     if (title == "#") 
      return false; 
     else 
      return true; 
    } 

而在未來,如果你想顯示僅在某些行的圖像,那麼你將不得不對您的特定代碼這是隻有一點點的變化更新圖片網址等將自動運行。

1

您可以像這樣輕鬆地隱藏整列。

myGridView.DataBind(); 
if (myGridView.Rows.Count > Threshold) 
    myGridView.Columns[StatusColumnIndex].Visible = false; 

要僅顯示「是」條目,您可以在綁定時使用LINQ進行過濾。

if (myData.Length > Threshold) 
{ 
    myGridView.DataSource = myData.Where(d => d.Status == Status.Yes); 
    myGridView.Columns[StatusColumnIndex].Visible = false; 
} 
else 
{ 
    myGridView.DataSource = myData; 
    myGridView.Columns[StatusColumnIndex].Visible = true; 
} 
myGridView.DataBind();