在代码后面使用DataSet和Linq To Sql作为DataSource

时间:2012-05-07 22:47:47

标签: c# asp.net linq-to-sql gridview webforms

我一直致力于一个项目,我们只使用一个 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上看到它们。

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

2 个答案:

答案 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)

我头脑中的一些选项:

  1. 请勿使用AutoGenerateColumns,而是明确创建 要显示的列。

  2. 明确隐藏关键列:

    gvMyGrid.Columns["a"].Visible = false;
    gvMyGrid.Columns["b"].Visible = false;