В основном я пытаюсь создать приложение для викторины (вопросы с несколькими вариантами ответов) и хочу вычислить общее количество правильных ответов на основе значения данных из базы данных.
Поэтому я использовал Listbox внутри повторителя, чтобы показать варианты выбора, которые выглядят следующим образом:
<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
<ItemTemplate>
Q-<%# Eval("Question_Text") %><br />
<asp:ListBox ID="ListBox1" runat="server" CssClass="listboxCSS"></asp:ListBox><br /> <br />
</ItemTemplate>
</asp:Repeater>
и код C # выглядят так:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
SqlCalss Obj = new SqlCalss();
Repeater1.DataSource = Obj.ExecuteCmdSelect("SELECT * from Questions where ExamId=1");
Repeater1.DataBind();
}
protected void Repeater1_ItemDataBound(object source, RepeaterItemEventArgs e)
{
string choice = DataBinder.Eval(e.Item.DataItem, "Question_Id").ToString();
SqlCalss Obj = new SqlCalss();
DataSet Ds = new DataSet();
Ds = Obj.ExecuteCmdSelect("SELECT * from Choices where QuestionId="+choice);
ListBox ListBox1 = (ListBox) (e.Item.FindControl("ListBox1"));
ListBox1.DataSource = Ds;
ListBox1.DataTextField = "Choice_Text";
ListBox1.DataValueField = "Answer";
ListBox1.DataBind();}
Код работает хорошо, он показывает несколько вопросов (зависит от теста) с несколькими вариантами ответов на каждый вопрос, отображаемый в списке.
Теперь для каждого вопроса DataValueField может иметь только одно из двух значений (0 = неверно, 1 = правильно). Кроме того, общее количество вопросов отличается от одного опроса к другому, поэтому я не знаю, сколько там списков.
Как добавить кнопку, которая вычисляет все выбранные значения данных, чтобы показать общее количество правильных ответов?
Я попробовал этот код:
int x = Repeater1.Controls.Count(x => x.DataValueField == 1);
и это
int numCorrect = Repeater1.Items.Count(x => x.DataValueField == 1);
Edit:
Когда я запускаю веб-страницу, например, викторину, в которой есть два вопроса (каждый вопрос имеет четыре варианта в списке)
Я обнаружил, что когда я просматриваю исходный текст веб-страницы, он создает два списка с одинаковым именем, например так:
<select size="4" name="Repeater1$ctl00$ListBox1" id="Repeater1_ListBox1_0" class="listboxCSS">
....
<select size="4" name="Repeater1$ctl01$ListBox1" id="Repeater1_ListBox1_1" class="listboxCSS">
и я выяснил, как получить значение первого с помощью кода, подобного этому:
ListBox ListBox1 = (ListBox)this.FindControl("Repeater1$ctl00$ListBox1");
Response.Write(ListBox1.SelectedValue.ToString());
В любом случае, я могу получить все значения списков с одинаковыми именами?
Заранее большое спасибо.