2011-08-24 100 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;