GridViewColumn在编辑时为只读

时间:2018-12-13 06:25:29

标签: c# asp.net .net gridview

我有一个包含一些数据的gridview,并且对于每一行都可以编辑数据,因此他们看到的是EditTemplateField而不是templateField。 现在,具有特定位置的用户将无法编辑TaskName列。

我首先是这样尝试的:

protected void gvSubtasks_RowEditing(object sender, GridViewEditEventArgs e)
        {
            GridView gv = sender as GridView;
            gvSubtasks.Columns[0].ReadOnly= true;
            gv.EditIndex = e.NewEditIndex;
            BindGridView();
        }

但是它没有找到ReadOnly属性。

然后我像这样尝试:

   protected void gvSubtasks_RowEditing(object sender, GridViewEditEventArgs e)
    {
        GridView gv = sender as GridView;
        gv.EditIndex = e.NewEditIndex;
        BindGridView();
        foreach (GridViewRow row in gvSubtasks.Rows)
        {
            TextBox txtTaskName = row.Cells[0].FindControl("txtTaskName") as TextBox;

            if (IsRightUserPosition()){
                txtTaskName.Enabled = true;
            }
            else
            {
                txtTaskName.Enabled = false;
            }
        }
    }

但是找不到文本框。

1 个答案:

答案 0 :(得分:0)

您需要将Readonly属性设置为true:

((BoundField)gridView1.Columns[columnIndex]).ReadOnly = true;

您可以尝试在gridView1的RowDataBound事件中执行此操作

尝试在编辑模板中使用标签。

C#:

protected bool ShowButton(object DataItem)
{
    //Here you can place as many conditions as you like 
    //Provided you always return either true or false
    if (Put Access condition here)
        return true;
    else
        return false;
}

HTML代码:

	<Columns>
			<asp:TemplateField>
				<ItemTemplate>
						<asp:Label ID="lbldate" runat="server" Visible='<%# ShowButton(Eval("Process")) %>'></asp:Label>
				</ItemTemplate>
				<EditItemTemplate>
						<asp:Label ID="lbldate" Visible='<%# ShowButton(Eval("Process")) %>' runat="server" ></asp:Label>
						<asp:TextBox ID="lbldate" Visible='<%# ShowButton(Eval("Process")) %>' runat="server" ></asp:Label>
				</EditItemTemplate>
			</asp:TemplateField>    
	</Columns>