ASP中的动态更改:GridView列

问题描述:

我创建了一个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> 

但是,表格中每一行的显示状态都会在页面上产生大量的视觉噪音。因此,如果页面上有更多条目,并且如果条目数量很少,则显示[是/否]图标,而不是此方法,我只想显示“是”状态。

任何人都可以提供一些建议,如何实现这一目标?

谢谢!

我能理解你的问题是你想要两件东西

*)。如果没有记录,那么你想在每一行中显示两件事,一件是状态图像和状态。

*)。如果有很多记录,那么你只想显示状态文本而不是图像。

如果我是正确的,然后解决方案是在这里:

在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; 
    } 

而在未来,如果你想显示仅在某些行的图像,那么你将不得不对您的特定代码这是只有一点点的变化更新图片网址等将自动运行。

您可以像这样轻松地隐藏整列。

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();