gridview行绑定到linq查询

时间:2011-05-01 14:57:25

标签: c# asp.net linq linq-to-objects

我需要将LINQ查询绑定到gridview的行。我正在尝试创建一个类似于expedia中矩阵的表,其中有不间断,1个停止和2个不同行的停止。我不太确定如何将查询绑定到gridview行。感谢您的帮助。

    var imgquery = from f in XElement.Load(MapPath("flightdata3.xml")).Elements("flight")
                   orderby Convert.ToInt32(f.Element("price").Value)
                   select new
                   {
                       ImagePath = (string)f.Element("airlineimageurl").Value
                   };


    //query for gvMatrix where numberofstops=0
    var numstops0query = from f in XElement.Load(MapPath("flightdata3.xml")).Elements("flight")
                where Convert.ToInt32(f.Element("numberofstops").Value) == 0
                orderby Convert.ToInt32(f.Element("price").Value)
                select new
                {
                    Price = "$" + (Int32)f.Element("price"),
                    ImagePath = (string)f.Element("airlineimageurl").Value
                };

    <asp:GridView ID="gvMatrix" runat="server">
    </asp:GridView>

2 个答案:

答案 0 :(得分:0)

我相信您需要从GridView RowDataBound事件调用您的辅助查询,然后手动填充您的辅助值字段:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowdatabound.aspx

但是,您似乎可以在SQL连接或子选择中获得所需内容。如果您正在使用SQL数据源,我会使用SQL来查看是否可以在单个Select语句中获取数据,然后返回并查看是否可以将SQL查询转换为适当的LINQ - 或者我可能会调用它通过存储过程。但是,如果您致力于LINQ,或者加入或子选择不起作用,那么RowDataBound是您最好的选择。

答案 1 :(得分:0)

我不确定,Grid View会为您提供所需的功能,因为数据集将绑定到整个网格。您可以在运行时创建HTMl表结构,并在您创建的每一行上控制它以绑定您拥有的任何linq数据。希望它有所帮助:)

placeHolder.Controls.Clear(); //asp:placeholder holds the table structure.
Table table = new Table();
table.ID = "table";
placeHolder.Controls.Add(table); //adding to place holder

TableRow row = new TableRow();
row.ID ="rowID";
table.Rows.Add(row); //creating first row for first linq dataset

var nonstop0query = from x in obj select new {x.ID, x.Name, x.Age}; //first linq dataset.

//Creating cells for the data returned by the nonstop0query
TableCell cell = new TableCell();
cell.ID = "cell1";
row.Cells.Add(cell);
cell.Text = nonstop0Query[0];

cell = new TableCell();
cell.ID = "cell2";
row.Cells.Add(cell);
cell.Text = nonstop0Query[1];

cell.ID = "cell3";
row.Cells.Add(cell);
cell.Text = nonstop0Query[2];

//Same way can be done for more dataset to bind to row.