【发布时间】:2009-02-04 14:48:26
【问题描述】:
我需要将 GridView 中 BoundField 的“ReadOnly”属性设置为记录集中由同一 GridView 显示的位字段的值。
我知道我可以在代码中实现这一点,但出于兴趣,我想知道是否可以使用 sn-p 在属性内以声明方式执行此操作?
干杯,
杰米
【问题讨论】:
我需要将 GridView 中 BoundField 的“ReadOnly”属性设置为记录集中由同一 GridView 显示的位字段的值。
我知道我可以在代码中实现这一点,但出于兴趣,我想知道是否可以使用 sn-p 在属性内以声明方式执行此操作?
干杯,
杰米
【问题讨论】:
是的,您可以这样做。创建一个 TemplatedField 并在绑定语句中使用任一
<%# ((Employee)Container.DataItem).IsApproved ? "yes" : "no" %>
或者您可以使用代码隐藏中的方法
<%# FormatBool(((Employee)Container.DataItem).IsApproved) %>
其中 FormatBool 是代码隐藏中的属性
protected string FormatBool(bool value)
{
if (value)
return "yes";
return "no";
}
【讨论】:
如果您需要绑定到属性,我会使用 TemplateField,然后在那里设置行为。仅当您不能使用代码时才这样做,否则,这是您最好的选择。
我认为没有办法直接绑定 BoundColumn 的细节。
【讨论】:
我无法找到一种方法来根据 DetailView 的数据以声明方式处理 BoundField 或 TemplateField 的属性。
Bendewey 非常仁慈地假设我正在绑定到一个业务对象,而实际上我是在这个实例中直接处理数据 - 抱歉没有说清楚。
我在后面的代码中的解决方案如下:
protected void DetailsView1_DataBound(object sender, EventArgs e)
{
DetailsView dv = (DetailsView)sender;
if (dv.DataItemCount > 0)
{
DataRowView data = (DataRowView)dv.DataItem;
bool isFixed = (bool)data["IsFixed"];
if (isFixed)
{
dv.Rows[2].Enabled = false;
dv.Rows[6].Enabled = false;
}
}
}
我很失望,我不得不引用我想按索引禁用的行。可能有一种方法可以通过它们的数据字段引用这些行,而无需遍历所有行,但我乍一看找不到。
感谢您的帮助!
【讨论】: