Ienumerable<KeyValuePair> в качестве источника данных . как это сделать?

#c# #asp.net #generics

#c# #asp.net #общие

Вопрос:

У меня есть общий метод, который возвращает

 IEnumerable<KeyValuePair<T, string>> 
  

но я ожидаю, что T будет целым числом. Как я могу привязать это к полю со списком в asp.net приложение веб-формы?

В настоящее время я получаю исключение, когда привязываю результат к своему списку со списком. мой метод заключается в

 public static IEnumerable<KeyValuePair<T, string>> GetData<T>(IEnumerable<global::Dev.DAL.pets> st, Func<global::Dev.DAL.pets, T> getData)
    {
        var filtered = st.Select(a => new  { Id = getData(a), Code = Convert.ToInt32(getData(a)).ConvertToCode() });
        foreach(var v in filtered )
            yield return new KeyValuePair<T, string>(v.Id, v.Code );



    }
  

Комментарии:

1. Если вы ожидаете T , что это будет целое число, почему бы не сделать его целым, а не универсальным?

2. Отличный вопрос, это то, что я сейчас делаю. Я учусь использовать generic, и это, вероятно, момент путаницы в моем путешествии. Спасибо за комментарий.

3. Не могли бы вы опубликовать генерируемое исключение?

4. вот генерируемое исключение: сообщение об исключении: привязка данных: ‘System. Коллекции. Generic.KeyValuePair`2[[System.Int32, mscorlib, Version=4.0.0.0, Culture=нейтральный, PublicKeyToken=b77a5c561934e089],[System. Строка, mscorlib, версия= 4.0.0.0, Культура = нейтральная, PublicKeyToken=b77a5c561934e089]]’ не содержит свойства с именем ‘Code’ .

Ответ №1:

Я предполагаю, что ваша разметка (или код) неправильно устанавливает свойства DataTextField /DataValueField выпадающего списка.

Попробуйте установить для "Value" DataTextField значение, а для "Key" DataValueField значение .

 <asp:DropDownList ... DataTextField="Value" DataValueField="Key" ...
  

Комментарии:

1. ну, я на самом деле не предпринял этот явный шаг после вызова databind . Может ли это объяснить ошибку? Исключение генерируется в операторе

2. Часть вашего исключения does not contain a property with the name 'Code' наводит меня на мысль, что в вашей разметке или коде DropDownList указывается значение DataTextField или DataValueField "Code" . Процедура привязки данных пытается найти свойство, указанное Code в источнике данных, однако оно не существует, и выдается исключение.

3. Да, на самом деле я сделал в разметке. Я установил DataTexField в качестве кода. так что да, я сделал.

4. Попробуйте изменить свою разметку, как описано в моем ответе выше, это должно решить проблему.

5. ее я моя разметка <asp:ListBox Width=»100px» ID=»lsb_id» AutoPostBack=»true» DataTextField=»Code» DataValueField=»Id» Runat=»server» Height=»70″ SelectionMode=»Multiple» /> и я получаю точно такое же исключение… Имеет ли код какой-либо смысл в первую очередь?