我有一个包含一些数据的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;
}
}
}
但是找不到文本框。
答案 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>