2013-12-05 1 views
0

Если у меня есть список с несколькими свойствами и свойствами, как я могу с LINQ получить все A в списке, который получил значение свойства A.abc = «ABC». Я хочу, чтобы это произошло, когда SelectedIndexChanged запускается из выпадающего списка. Я попытался следующие:Используя LINQ, получите все объекты из списка со значением конкретного столбца?

var datasource = from A in GetListOfAs() where A.attribute == "ABC" select A; 

      GridView1.DataSource = datasource; 
      GridView1.DataBind(); 

И в моей GridView У меня есть следующие BoundFields:

<asp:BoundField DataField="attribute" HeaderText="h1" /> 
<asp:BoundField DataField="df2" HeaderText="h2" /> 

Так что я хочу, чтобы показать, как:

h1    h2 
    ------------------ 
    ABC   123 
    ABC   456 

EDIT:

Исходный источник данных - это весь GetListOfAs(). Я пытаюсь перечислить только те, которые имеют значение атрибута как «ABC», но он продолжает показывать тот же список, когда я выбираю ABC в выпадающем списке (я вижу, что SelectedIndexChanged происходит, поскольку страница перезагружается).

метод Page_Load:

protected void Page_Load(object sender, EventArgs e) 
    { 
     GridView1.DataSource = GetListOfAs(); 
     GridView1.DataBind(); 

     ddl.DataSource = GetListOfChoices(); 
     ddl.DataTextField = "name"; 
     ddl.DataValueField = "attribute"; 
     ddl.DataBind(); 

     if (ddl.Items.Count > 0) 
     { 
      ddl.Items.Insert(0, "Select one"); 
      ddl.Items[0].Value = ""; 
      ddl.SelectedIndex = 0; 
     } 
    } 

По-видимому, проблема заключается не получает правильного SelectedValue.

У меня есть: String ddlValue = ddl.SelectedValue; Не должно ли это работать? Я продолжаю получать пустой (""), который является начальным значением.

+4

Пока неясно, о чем вы спрашиваете. У вас есть код, который уже фильтрует свойство, равное 'ABC'. –

+0

Если бы вы могли, разместите свой код для привязки к DataGrid (это скорее всего событие 'Page_Load'). Пожалуйста, включите всю страницу 'Page_Load' – mclark1129

+0

Вы уверены, что получаете правильное значение из DropDownList в событии SelectedIndexChanged? Вы повторно заполняете DropDownList без проверки IsPostBack? – roryWoods

ответ

1

Что вы хотите сделать, это добавить код IsPostBack к вашему первоначальному коду привязки внутри события Page_Load. Page_Load срабатывает при каждом обратном вызове, поэтому, если вы не сделаете эту проверку, вы будете эффективно запускать свою первоначальную привязку данных (включая все элементы) каждый раз.

Изменение загрузки страницы в этом

protected void Page_Load(object sender, EventArgs e) 
{ 

    // Only bind your gridview with all items, if this is the first page load 
    if(!Page.IsPostBack) { 
     GridView1.DataSource = GetListOfAs(); 
     GridView1.DataBind(); 

     ddl.DataSource = GetListOfChoices(); 
     ddl.DataTextField = "name"; 
     ddl.DataValueField = "attribute"; 
     ddl.DataBind(); 

     if (ddl.Items.Count > 0) 
     { 
      ddl.Items.Insert(0, "Select one"); 
      ddl.Items[0].Value = ""; 
      ddl.SelectedIndex = 0; 
     } 
    }  

} 

Я думаю, что IsPostBack связыванию ошибка допущена каждый разработчик ASP.net, когда они впервые начинают, так что не чувствую себя плохо! У тебя хорошая компания :).

0
var datasource = GetListOfAs().Where(x=>x.attribute=="ABC").ToList(); 

Это еще один способ получить то, что вы уже получили с собой.

Смежные вопросы