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