我一直致力于一个项目,我们只使用一个 GridView来显示不同Linq结果的结果。
此gridview具有:
AutoGenerateColumns = true;
我们希望将Linq结果用作数据源。 在这个结果中,我们有我们想要用作DataKeys的列。 当我们将结果绑定到GridView时,我们不希望向用户显示这些列。
以下是一个例子:
gvMyGrid.DataSource = from finalRows in summaryReport
select new
{
finalRows.a,
finalRows.b,
finalRows.c,
finalRows.d,
finalRows.e
};
gvMyGrid.DataKeyNames = new string[] { "a", "b" };
gvMyGrid.DataBind();
因此,在完成此绑定后,我们仍然会将“a”和“b”视为列。 我们打电话时可以使用“a”和“b”:
gvReport.Datakeys
但是,我们不希望在gridview上看到它们。
所以我的问题是,我们如何隐藏这些列但仍然将它们用作数据键? 谢谢。
答案 0 :(得分:1)
我认为如果使用AutoGenerateColumns = true;
,可以使用DataKeys直接执行此操作。你可以试试这种方式。在绑定数据源之前,请确保您的DataKey列始终位于集合中的相同位置。比如datakey“a”是列索引1,并且说datakey“b”是列索引2.因此,无论你的集合是返回10列还是20列仍然是“a”而“b”应该在索引1和2中。那么你可以做这样可以隐藏列。
protected void gvReport_RowCreated(object sender, GridViewRowEventArgs e)
{
for (int i = 0; i < e.Row.Cells.Count; i++)
{
e.Row.Cells[1].Visible = false;
e.Row.Cells[2].Visible = false;
}
}
GridView就像
<asp:GridView ID="gvReport" runat="server" onrowcreated="gvReport_RowCreated" AutoGenerateColumns="true">
答案 1 :(得分:0)
我头脑中的一些选项:
请勿使用AutoGenerateColumns,而是明确创建 要显示的列。
明确隐藏关键列:
gvMyGrid.Columns["a"].Visible = false;
gvMyGrid.Columns["b"].Visible = false;