привязка строки gridview к запросу linq - PullRequest
0 голосов
/ 01 мая 2011

Мне нужно привязать запрос LINQ к строке вида сетки. Я пытаюсь создать таблицу наподобие матрицы в экспедиции, где есть нон-стоп, 1 стоп и 2 остановки в разных рядах. Я не совсем уверен, как связать запросы со строками вида сетки. Я ценю вашу помощь.

    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 голосов
/ 01 мая 2011

Я не уверен, что 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. 
0 голосов
/ 01 мая 2011

Полагаю, вам нужно будет вызвать вторичный запрос из события GridView RowDataBound, а затем вручную заполнить поля вторичного значения:

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

Однако, похоже, вы сможете получить то, что ищете, в SQL-соединении или дополнительном выборе. Если вы используете источник данных SQL, я бы поэкспериментировал с SQL, чтобы посмотреть, смогу ли я получить данные в одном операторе Select, а затем вернитесь назад и посмотрите, могу ли я перевести SQL-запрос в соответствующий LINQ - или я мог бы вызвать это через хранимую процедуру. Тем не менее, если вы привержены LINQ, или если объединение или дополнительный выбор не подойдет, тогда RowDataBound - ваш лучший выбор.

...