GridViewColumn 在编辑时只读

GridViewColumn readonly when edited

我有一个包含一些数据的 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;
            }
        }
    }

但是找不到文本框。

您需要将 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>