0

我一直在做一个项目,我们只使用一个GridView 来显示不同 Linq 结果的结果。

此网格视图具有:

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 上看到它们。

所以我的问题是,我们如何隐藏这些列但仍将它们用作数据键?谢谢你。

4

2 回答 2

1

我认为没有使用 DataKeys if 的直接方法AutoGenerateColumns = true;。你可以试试这个方法。在绑定数据源之前,请确保您的 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">
于 2012-05-07T23:08:22.563 回答
0

我想到了一些选项:

  1. 不要使用 AutoGenerateColumns 而是明确地创建您想要显示的

  2. 显式隐藏键列:

    gvMyGrid.Columns["a"].Visible = false;
    gvMyGrid.Columns["b"].Visible = false;
    
于 2012-05-07T23:11:27.923 回答