我只是想找到一种更好的方法来填充一些RadioButtonList控件。 usercontrol.ascx上有一定数量的这些。代码是我目前正在使用的,但我对Linq仍然不是很好,并且想知道是否有更好的方法来做到这一点。
quizId1 = quiz.Items[0].questionId;
pTag1.InnerText = quiz.Items[0].QuestionText;
foreach (Question q in quiz.Items[0].AnswerChoice)
{
radiobuttonlist1.Items.Add(new ListItem(q.Value, q.answerId));
}
对于radiobuttonlist2相同,但使用Items [1]等。
quizId2 = quiz.Items[1].questionId;
pTag2.InnerText = quiz.Items[1].QuestionText;
foreach (Question q in quiz.Items[1].AnswerChoice)
{
radiobuttonlist2.Items.Add(new ListItem(q.Value, q.answerId));
}
抱歉,InnerText是服务器端' P' tag,pTag1,pTag2等
答案 0 :(得分:1)
我假设您想使用ling来填充几个控件,而不是单个控件。
Linq用于查询,而非更新。要进行更新,您仍需要for
或foreach
个循环。
如果你的RadioButtonList
个对象在一个集合中,你可以循环遍历它们:
var radioList = new [] {radiobuttonlist1, radiobuttonlist2, ...};
for(int i = 0; i < quiz.Items.Length; i++)
{
var quizId = quiz.Items[i].questionId;
radioList[i].InnerText = quiz.Items[i].QuestionText;
radioList[i].Items.AddRange(quiz.Items[i]
.AnswerChoice
.Select(q => => new ListItem(q.Value, q.answerId))
.ToArray()
);
}
或使用其他人建议的DataSource
:
var radioList = new [] {radiobuttonlist1, radiobuttonlist2, ...};
for(int i = 0; i < quiz.Items.Length; i++)
{
var quizId = quiz.Items[i].questionId;
radioList[i].InnerText = quiz.Items[i].QuestionText;
radioList[i].DataSource = quiz.Items[i].AnswerChoice;
radioList[i].DataTextField = "Value";
radioList[i].DataValueField = "answerId";
}
但是没有Linq方式填充几个控件。
答案 1 :(得分:1)
试试这个
var listItems = (from x in quiz.Items[0].AnswerChoice
select new ListItem { Text = q.Value, Value = q.answerId }
).ToList<ListItem>();
radiobuttonlist1.DataSource = listItems;
radiobuttonlist1.DataBind();
答案 2 :(得分:0)
我想你可以这样做:
var listItems = from q in quiz.Items[0].AnswerChoice
select new ListItem(q.Value, q.answerId);
radioButtonlist1.Items.AddRange(listItems.ToArray());
虽然我不确定除了体验LINQ之外还有什么可以买到的......