如何在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;
答案 0 :(得分:11)
您可以使用
禁用列本身GridView1.AutoGenerateEditButton = false;
来自页面后面的代码。
或者您可以使用ItemTemplate而不是CommandField,
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton runat="server" ID="id" CommandName="Edit" Text="Edit" />
</ItemTemplate>
</asp:TemplateField>
在代码后面,您可以遍历GridView行并禁用每个LinkButton。
foreach(GridViewRow gvr in GridView1.Rows)
{
LinkButton row = gvr.FindControl("id") as LinkButton;
row.Enabled = false;
}
首先编辑:
我尝试了第二个解决方案,但它确实有效。但是,在使用GridView
之前,请确保已填写foreach
。否则,GridView.Rows.Count
可能为0。
第二次修改:
这也适用于CommandField
。将{0}替换为CommandField
中GridView
的位置。
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;
}