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实体做这个?
答案 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列只读...