我创建了一个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>
但是,显示表格中每一行的状态会在页面上产生大量的视觉噪音。因此,如果页面上有更多条目,并且如果条目数量很少,则只显示[是/否]图标,而不是这种方法我只想显示是状态。
任何人都可以就如何实现这一点提出一些建议吗?
谢谢!
答案 0 :(得分:1)
你的问题我能理解的是你想要两件事
*)。如果记录很少,那么你想在每一行显示两件事,一个是状态图像和状态。
*)。如果有很多记录,那么你只想显示状态文本而不是图像。
如果我是对的,那么解决方案就在这里:
在ItemTemplate Image和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>
现在,在您的数据源中,您必须根据需要进行一些更改,例如.. 在装订时,您将决定要显示图像的天气,如果没有,则将数据源的图像值更新为“#”。现在Check(string imageUrl)是函数背后的代码
public bool Check(string title)
{
if (title == "#")
return false;
else
return true;
}
将来,如果您只想在某些行上显示图像,那么您必须对您的特定代码进行一点改动,这些代码用于更新图像URL,而其他代码将自动运行。
答案 1 :(得分: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();