如何在gridview中禁用命令字段控件中的控件

时间:2011-08-25 09:18:56

标签: c# asp.net

如何在gridview中找到命令字段控件。

在不在行数据绑定中的方法中。

到目前为止,我已经使用了这种编码,但我无法找到控件。

<asp:CommandField ButtonType="Image" ShowEditButton="True
                  HeaderText="Enter Leave"
                  EditImageUrl="~/IMAGES/edit-icon.gif">
    <ItemStyle HorizontalAlign="Center" />
</asp:CommandField>

源代码:

ImageButton edit = (ImageButton)EmployeeDetails.FindControl("Image");
edit.Enabled = false;

5 个答案:

答案 0 :(得分:11)

您可以使用

禁用列本身
GridView1.AutoGenerateEditButton = false;

来自页面后面的代码。


或者您可以使用ItemTemplate而不是CommandField,

<asp:TemplateField>
    <ItemTemplate>
        <asp:LinkButton runat="server" ID="id" CommandName="Edit" Text="Edit" />
    </ItemTemplate>
</asp:TemplateField>

在代码后面,您可以遍历GridView行并禁用每个LinkBut​​ton。

foreach(GridViewRow gvr in GridView1.Rows)
{
    LinkButton row = gvr.FindControl("id") as LinkButton;
    row.Enabled = false;
} 

首先编辑:

我尝试了第二个解决方案,但它确实有效。但是,在使用GridView之前,请确保已填写foreach。否则,GridView.Rows.Count可能为0。


第二次修改:

这也适用于CommandField。将{0}替换为CommandFieldGridView的位置。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{        
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
         e.Row.Cells[0].Enabled = false;
    }
}

答案 1 :(得分:1)

试试这个:

try to hide controls at DataBound or RowDataBound event of GridView

protected void EmployeeDetails_DataBound(object sender, EventArgs e)
{
        ImageButton edit = (ImageButton)EmployeeDetails.Row.Cells[0].FindControl("Image");
        edit.Visible = false;  
        edit.Enabled = false; //OR use this line
}

可以通过以下方式禁用特定列

EmployeeDetails.Columns[0].Visible = false;

希望这有帮助。

答案 2 :(得分:1)

您错过了指定行

类似的东西:

ImageButton edit = (ImageButton)EmployeeDetails.Rows[0].Cells[0].FindControl("Image");
edit.Enabled = false;

如果要禁用包含imageButton的列,可以执行以下操作:

EmployeeDetails.Columns[0].Visible = false;

答案 3 :(得分:0)

我有类似的问题。我只是BindData()函数中禁用了列的视图。

GridView1.Columns[0].Visible = false;

这对我有用,因为我的第一列是编辑专栏,我必须只为特定用户启用它。

祝你好运!

答案 4 :(得分:0)

将其转换为DataControlFieldCell,然后将Enabled设置为false。

其中:row.Controls [0]是您的CommandField控件

foreach (GridViewRow row in ManageDNXGridView.Rows)
{
    DataControlFieldCell editable = (DataControlFieldCell)row.Controls[0];
    editable.Enabled = false; 
}