在Gridview中,有时要根据数据行中某一个字段或几个字段的值决定此行是否可以编辑。数据可以编辑则显示编辑链接,否则不显示。
在数据绑定时把不能编辑行中的编辑链接去掉,使用RowDataBound事件。
看下面的AS.NET代码:
<data:GridView ID="GridView1" runat="server"            
                AutoGenerateColumns
="False"                    
                DataSourceID
="GradeDataSource"
                DataKeyNames
="GradeID"
                AllowMultiColumnSorting
="false"
                DefaultSortColumnName
="" 
                DefaultSortDirection
="Ascending"    
                OnRowDataBound
="GridView1_RowDataBound" 
            
>
            
<Columns>
                
<asp:CommandField ShowEditButton="True" EditText="修改" CausesValidation="false"/>
                                
<asp:BoundField DataField="GradeName" HeaderText="名称" SortExpression="GradeName"  />
                
<asp:BoundField DataField="StartDate" HeaderText="建立日期" SortExpression="StartDate"  />
                
<asp:BoundField DataField="EndDate" HeaderText="毕业日期" SortExpression="EndDate"  />
                
<asp:CheckBoxField DataField="Status" HeaderText="毕业" SortExpression="Status" />
                
<asp:CheckBoxField DataField="SchoolAppend" HeaderText="导入新生" SortExpression="SchoolAppend"  ReadOnly="true" />                
            
</Columns>
            
<EmptyDataTemplate>
                
<b>一个年级也没有</b>
            
</EmptyDataTemplate>
            
        
</data:GridView>
后台C#代码
 1protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
 2    {
 3        if (e.Row.RowType == DataControlRowType.DataRow)
 4        {
 5            Grade grade = (Grade)e.Row.DataItem;
 6            if (Convert.ToBoolean(grade.Status))
 7            {
 8                e.Row.Cells[0].Controls.Clear();
 9            }

10        }

11
12    }
这样当年级为已经毕业时,修改链接就自动消失,而未毕业年级的修改链接正常显示。
如图。