2011-08-24 84 views
8

我正在使用一個GridView編輯來編輯我的GridView中的值,當我按下編輯時,所有列都可以編輯,我希望其中一列不允許被編輯。Gridview禁用編輯1列asp.net

有什麼辦法可以做到這一點?

Thiss是我的aspx代碼:

<asp:GridView 

ID="GridView1" 
runat="server" 
AllowSorting="True" 
OnRowCommand="GridView1_SelectedIndexChanged1" 
AutoGenerateEditButton="True" 
OnRowCancelingEdit="GridView1_RowCancelingEdit" 
CellSpacing="10" 
OnRowUpdating="GridView1_RowUpdating" ShowFooter="True" 
onselectedindexchanged="GridView1_SelectedIndexChanged" 
OnRowEditing="GridView1_RowEditing"> 



</asp:GridView> 

感謝

+0

你是如何綁定你的GridView。 TemplateField或BoundField? – naveen

回答

4

當然,使用EditItemTemplate 。在下面的例子中域ID不會在編輯模式下編輯:

<asp:GridView runat="server"> 
    <Columns> 
     ... 
     <asp:TemplateField HeaderText="ID"> 
      <EditItemTemplate> 
       <%# Eval("ID") %> 
      </EditItemTemplate> 
     </asp:TemplateField> 
     ... 
    </Columns> 
</asp:GridView> 
+0

這個工作,但它創建另一列,並不會使當前只讀 – Karl

+1

這是因爲默認情況下GridView的屬性AutoGenerateColumns設置爲true。因此,它爲作爲DataItem提供的對象的每個屬性生成列,並添加已聲明的列(在我們的示例中爲ID)。您無法影響自動生成列的行爲。如果你想自定義某些東西(比如在某一列上禁用編輯),你應該關閉列的自動生成,並使用BoundField,TemplateField等聲明你需要的所有東西。 – Andrei

0

請出示一些標記。快速和骯髒我認爲取決於你的標記aspx你可以從EditItem模板中刪除文本框,以防止編輯的列...當然也有其他解決方案:)

+0

看到我編輯的 – Karl

20

如果使用asp:BoundField,嘗試

<asp:BoundField DataField="CustomerID" 
     ReadOnly="true"  
     HeaderText="Customer ID"/> 

否則,如果您使用的是asp:TemplateField,您可以

  1. 渲染它在任一種asp:Label內部EditItemTemplate
  2. 忽略EditItemTemplate該列共
+0

我正在使用數據綁定,即時嘗試使用綁定字段,但它告訴我它沒有找到 – Karl

+1

看到這個例子。 http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.boundfield.aspx BoundField必須位於'Columns'內 – naveen

+0

如果使用綁定域,這是最好的解決方案。如果可能的話,將不可編輯的字段放在BoundField中。 – MindLoggedOut

0

如果您使用的模板字段

((TemplateField)gvGridView.Columns[index]).EditItemTemplate = null; 

如果綁定列

((BoundField)gvGridView.Columns[index]).ReadOnly = true;