在我的ASP.NET应用程序中,我有一个GridView。对于此GridView中的特定字段,我添加了一个带有DropDownList的EditItemTemplate。但是,如果字段的值是“X”,那么我想只显示一个标签而不是DropDownList。那么我如何以编程方式检查字段值,然后决定显示哪个控件?
这是我的EditItemTemplate:
<EditItemTemplate>
<asp:DropDownList ID="DropDownListLevel_ID" runat="server"
DataSourceID="ODSTechLvl" DataTextField="Level_Name"
DataValueField="Level_ID" SelectedValue='<%# Bind("Level_ID", "{0}") %>'>
</asp:DropDownList>
</EditItemTemplate>
如果Level_ID的值是“X”,那么我想使用:
<asp:Label ID="LabelLevel_ID" runat="server" Text='<%# Bind("Level_ID") %>'></asp:Label>
而不是DropDownList。
我尝试在DropDownList之前嵌入一个if语句来检查Eval(“Level_ID”),但这似乎不起作用。有什么想法吗?
答案 0 :(得分:1)
试试这个:
<EditItemTemplate>
<asp:DropDownList ID="DropDownListLevel_ID" runat="server"
DataSourceID="ODSTechLvl" DataTextField="Level_Name"
DataValueField="Level_ID" SelectedValue='<%# Bind("Level_ID", "{0}") %>'
Visible='<%# Eval("Level_ID") != "X" %>'>
</asp:DropDownList>
<asp:Label ID="LabelLevel_ID" runat="server" Text='<%# Bind("Level_ID") %>'
Visible='<%# Eval("Level_ID") == "X" %>'></asp:Label>
</EditItemTemplate>
答案 1 :(得分:0)
以下是适用于ASP.Net的内容。
您可以创建RowDataBound事件并隐藏标签或DropDownList
<asp:GridView id="thingsGrid" runat="server" OnRowDataBound="thingsGrid_RowDataBound"
...&gt; ...
并在您的代码中:
protected void thingsGrid_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
var boundData = e.Row.DataItem;
...
if (boundDataMeetsCondition)
{
e.Row.Cells[4].FindControl("editThingDropDownList").Visible = false;
e.Row.Cells[4].FindControl("editThingLabel").Visible = true;//*
}
else
{
...
}
}
}
*请注意,这不太理想,因为它对单元格索引进行了硬编码,控件的ID是一个在运行时之前不会被检查的字符串。在asp.net mvc中有更优雅的方法来解决这个问题。
OnRowDataBound是一个大锤,可以让您完全访问网格,页面方法和整个应用程序。在一个非常简单的场景中,您也可以在不涉及代码隐藏的情况下进行内联。
<asp:Label ID="Label1" runat="server" Visible='<%# Convert.ToBoolean(Eval("BooleanPropertyInData"))%>' Text='<%# Eval("PropertyInData") %>'></asp:Label>
或
<asp:Label ID="Label1" runat="server" Visible='<%# Eval("PropertyInData").ToString()=="specialValue"%>' Text='<%# Eval("PropertyInData") %>'></asp:Label>
在第一种内联方法中,您的数据源必须公开这样的属性,而在第二种情况下,您需要将您的specialValue业务逻辑硬编码到您的演示文稿中,这也是丑陋的并且会导致可维护性问题。