2013-10-29 52 views
1

我有以下數據網格認爲是在DB如何在數據網格視圖設置禁用或只讀

我需要加載的數據網格的信息,使所有的文本框部分的一些數據綁定的數據列(在這個例子中只是出現,但有很多)是隻讀或禁用的。

<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

試試這個:

<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更多地工作,但據我所知,原理是一樣的。

+0

見@ slfan的答案的答案循環等以及...使用EditItemTemplate中可能更容易。 – CodeCanuck

3

即使您的DataGrid不在EditMode中,它也會在ItemTemplate內顯示TextBox。否則,您使用EditItemTemplate。這就是爲什麼您的解決方案無法工作。您有幾種選擇:

  • 將一個<asp:Literal>控制到您的ItemTemplate
  • 綁定TextBoxReadOnly屬性從代碼的視圖模型
  • 的布爾值的背後,你必須解決的正確控制

,你可以使用類似這樣的項目模板中引用的文本框

foreach (GridViewRow row in grdRequestTypeItem.Rows) 
{ 
    var txtLot = row.FindControl("txtLot") as TextBox; 
    txtLog.IsReadOnly = true; 
} 

你也可以使用數據綁定事件對行而不是通過行中@ Stealth22

+0

完全滑了我的腦海,在(facepalm)TemplateField中有多個模板類型!這實際上是一個更簡單的方法。 – CodeCanuck

相關問題