我有一个从数据库表加载的gridview。 表中有一列名为“valid”,其值为“Y”或“N”。 现在,我想要做的是,检查'valid'的值是否为Y,然后加载gridview时该行中的整个记录应显示为禁用。
如何处理?我应该为此编写一个程序,还是可以从后面的代码中完成?
注意:有效列不是gridview的一部分。
答案 0 :(得分:5)
您需要使用gridview的RowDataBound
事件来禁用行
请注意,如果您使用databound columns
,则会在tr
和td
中呈现,然后您需要找到该单元格,然后设置disable属性。
protected void gvEntity_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
//CheckBox cbAttachClrReq = (CheckBox) e.Row.FindControl("chkAdd");
//check the value here and set enable property
e.Row.Enabled = false;
}
}
正如@HanletEscaño建议您可以在同一列中添加字段值,如下所示
<asp:TemplateField>
<ItemTemplate>
<<asp:Label ID="lbl1" runat="server"
Value='<%# Eval("Name") %>' />
<asp:HiddenField ID="HiddenField1" runat="server"
Value='<%# Eval("valid") %>' />
</ItemTemplate>
并在row-databound事件中获取隐藏字段值,如下所示
protected void gvEntity_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
HiddenField Hf = (HiddenField) e.Row.FindControl("HiddenField1");
if(Hf.Value=="Y")
e.Row.Enabled = false;
}
}
答案 1 :(得分:2)
请尝试以下操作。
此示例获取每条记录DataRowView
,然后从基础数据源中提取valid
列以进行测试。
protected void grdDetails_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
var dr = e.Row.DataItem as DataRowView;
if(Convert.ToString(dr["valid"]) == 'Y')
e.Row.Enabled = false;
}
}
和标记
<asp:GridView ID="grdDetails" runat="server" OnRowDataBound="grdDetails_RowDataBound"