【问题标题】:Trying to bind GridView from Linq, not sure how to extract data I need试图从 Linq 绑定 GridView,不知道如何提取我需要的数据
【发布时间】:2013-05-03 14:53:48
【问题描述】:

所以我有一个数据集,我将其视为一个 IEnumerable,然后应用一个 LINQ 表达式,它将模组收集到一个 var g 中。这是代码隐藏...

    protected void Page_Load(object sender, EventArgs e)
    {
        LinqSamples samples = new LinqSamples(gvNumbers, this.Page);
        samples.DataSetLinq40();
    }

    private class LinqSamples
    {
        private DataSet testDS;
        private GridView _gv;
        private Page _pg;

        public LinqSamples(GridView gv, Page pg)
        {
            testDS = TestHelper.CreateTestDataSet(pg);
            _gv = gv;
            _pg = pg;
        }

        public void DataSetLinq40()
        {
            var numbers = testDS.Tables["Numbers"].AsEnumerable();

            var numberGroups = from n in numbers
                               group n by n.Field<int>("number") % 5 into g
                               select new { Remainder = g.Key, Numbers = g };

            _gv.DataSource = numberGroups;
            _gv.DataBind();
        }
    }

        internal static DataSet CreateTestDataSet(Page pg)
        {
            DataSet ds = new DataSet();

            // Customers Table
            ds.Tables.Add(CreateNumbersTable());

            ds.AcceptChanges();
            return ds;
        }

        private static DataTable CreateNumbersTable()
        {
            int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
            DataTable table = new DataTable("Numbers");
            table.Columns.Add("number", typeof(int));

            foreach (int n in numbers)
            {
                table.Rows.Add(new object[] { n });
            }
            return table;
        }

...和 ​​.aspx 页面...

            <asp:GridView ID="gvNumbers" runat="server" AutoGenerateColumns="false">
        <Columns>
            <asp:BoundField HeaderText="Group" DataField="Remainder" />
            <asp:BoundField HeaderText="Number" DataField="Numbers" />
        </Columns>
    </asp:GridView>

我想要的是 GridView 中的一列具有模组,例如 0,而另一列具有该组中的所有数字,以逗号分隔,因此对于 0,“0, 5",对于 1 将是 "1, 6",对于 2 "2, 7" 等。如何使用我已经拥有的包含数据的 linq 结果执行此操作?

当我运行页面时,第二列显示 g 的类型为 System.Collections.Generic.List1[System.Data.DataRow]

【问题讨论】:

    标签: c# asp.net xml linq gridview


    【解决方案1】:

    您可能正在将查询分配给数据源而不是集合,请使用 .ToList()

    _gv.DataSource = justNums.ToList();
    _gv.DataBind();
    

    【讨论】:

    • 不抱歉,我在那之后进行了编辑。 必须是我对 Linq 表达式中的 'Numbers = g' 子句做一些事情,使其成为字符串列表或其他东西。
    • 您可以使用群组功能,例如您可以使用 g.Count() 获取组中的元素数。
    • 'g.GetAll()' 的等价物是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多