如何在数据网格视图中设置禁用或只读

时间:2013-10-29 21:28:47

标签: asp.net datagrid readonly

我有以下数据网格视图,它是与数据库

中的某些数据绑定的数据

我需要在数据网格中加载信息,并使某些列中的所有文本框(在示例中仅出现,但有很多)可以只读或禁用。

<asp:DataGrid ID="grdRequestTypeItem" TabIndex="1" runat="server" CssClass="Grid" AutoGenerateColumns="False"
    AllowSorting="True" Visible="true">
    <SelectedItemStyle CssClass="GridSelectedItem"></SelectedItemStyle>
    <AlternatingItemStyle CssClass="GridAlternatingItem"></AlternatingItemStyle>
    <ItemStyle CssClass="GridItem"></ItemStyle>
    <HeaderStyle CssClass="GridHeader"></HeaderStyle>
    <Columns>
        <asp:TemplateColumn HeaderText="Lot Number">
            <ItemTemplate >
                <asp:TextBox ID="txtLot" runat="server" Width="100%" Text='<%# DataBinder.Eval(Container, "DataItem.Lot") %>' />
            </ItemTemplate>
        </asp:TemplateColumn>
     </Columns>
</asp:DataGrid>

如何在后面的代码中禁用该列? 以下两项都不起作用

grdRequestTypeItem.Columns[1].IsReadOnly = true;
((BoundField)grdRequestTypeItem.Columns[0]).ReadOnly = true;
((TemplateField)grdRequestTypeItem.Columns[0]).EditItemTemplate = null;

2 个答案:

答案 0 :(得分:3)

即使您的DataGrid不在EditMode中,它也会在TextBox内显示ItemTemplate。否则,您使用EditItemTemplate。这就是为什么你的解决方案都不起作用的原因您有几种选择:

  • <asp:Literal>控件放入ItemTemplate
  • ReadOnly的{​​{1}}属性绑定到viewModel的bool值
  • 从代码背后,你必须解决正确的控制

您可以使用类似的内容来引用项目模板中的文本框

TextBox

您还可以在行上使用DataBinding事件,而不是像@ Stealth22的答案那样循环遍历行

答案 1 :(得分:2)

试试这个:

 <asp:DataGrid ID="grdRequestTypeItem" TabIndex="1" runat="server" CssClass="Grid" AutoGenerateColumns="False" AllowSorting="True" Visible="true"
 OnItemDataBound="grdRequestTypeItem_ItemBound">

然后在你的代码隐藏......

 protected void grdRequestTypeItem_ItemBound(Object sender, DataGridItemEventArgs e)
 {
      if((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
      {
           TextBox txtLot = e.Item.FindControl("txtLot");

           if (txtLot != null)
           {
                txtLot.ReadOnly = true;
           }
      }
 }

如果我在任何地方都错了,有人可以纠正我,因为我使用GridViews而不是DataGrids,但据我所知,原理是一样的。