使动态创建的Gridview列只读

时间:2014-12-05 10:28:59

标签: c# asp.net gridview entity-framework-5

 var a = from employee in entities.Employees
         from ticket in employee.EmployeeTicket
         select new {ID=employee.ID,Name=employee.Name,TicketNo=ticket.TicketNo,
         Subject=ticket.Subject,Date=ticket.Date,State=ticket.State.Name};//Columns

GridViewTicketHistory.DataSource = a;//Datasource is Linq to entity
GridViewTicketHistory.DataBind();

Gridview具有 Linq to entity 数据源。 我想创建动态创建的列(ID,Name,TicketNo,Subject,Date,State)只读 ..我尝试使用列索引GridViewTicketHistory.Columns进行强制转换[ 2]在rowdatabound事件中数据绑定然后使其只读。但是索引超出范围,这意味着它没有看到任何具有该索引的列。是否有任何方法可以选择特定列并使其只读。如果我需要使用数据表,我怎样才能为linq实体做这个?

1 个答案:

答案 0 :(得分:0)

   <asp:BoundField DataField="ID" HeaderText="ID"/>
   <asp:BoundField DataField="Name" HeaderText="Name"/>
   <asp:BoundField DataField="TicketNo" HeaderText="TicketNo"/>
   <asp:BoundField DataField=" Subject" HeaderText="Subject"/>
   <asp:BoundField DataField="Date" HeaderText="Date"/>
 <asp:BoundField DataField="StateName" HeaderText="StateName"/>

不要给出像ID = employee.ID这样的名字。那么

select new {ID=employee.ID,Name=employee.Name,TicketNo=ticket.TicketNo,
         Subject=ticket.Subject,Date=ticket.Date,State=ticket.State.Name};

成为;

     select new{employee.ID,employee.Name,ticket.TicketNo,ticket.Subject,
ticket.Date,ticket.State.StateName};

如果最后一个变量相同,它也不会编译.. employee.Name和ticket.State.Name重命名数据库中的表列并重新创建实体模型。我做了它并将外键列更改为StateName.Now你可以使你的数据字段列只读。  ((BoundField)GridView1.Columns[0]).ReadOnly = true;使ID列只读...