0

ユーザーが学生データを入力できる非常に単純な ASP.NET ページを作成しようとしています。フォームが送信されると、学生オブジェクトのリストが更新され、リピーター (リストにデータバインドされている) が新しいデータを反映します。ユーザーは新しい生徒を追加し続けることができるはずです。

私のものは実行できません。理由がわかりません。ポストバックとデータバインディングの方法を何度も変更しようとしました。

   /*
     * Student class representing a real-life student.
     */
    public class Student
    {

        /* Override default constructor */
        public Student(string first, string last, string studentid, string program, string option)
        {
            FName = first;
            LName = last;
            STID = studentid;
            Program = program;
            Option = option;
        }

        /* Property for the student's first name */
        public string FName
        {
            set; get;
        }

        /* Property for the student's last name */
        public string LName 
        {
            set; get;         
        }

        /* Property for the student ID */
        public string STID
        {
            set; get;
        }

        /* Property for the program of study */
        public string Program
        {
            set; get;
        }

        /* Property for the option within the program of study */
        public string Option
        {
            set; get;
        }

    }

    /* Class for the web form UI */
    public partial class _Default : System.Web.UI.Page
    {

        /* List of students to be displayed in the repeater control */
        private List<Student> myStudents;

        protected void Page_Load(object sender, EventArgs e)
        {

            myStudents = new List<Student>();



            /* Check postback value when the page loads - this is the first time */
            if (IsPostBack == false)
            {
                /* Bind the Collection to the Repeater control */
                Label1.Text = "" + myStudents.Count;
                Repeater1.DataSource = myStudents;
                Repeater1.DataBind();
            }


        }

        /* 
         * Submit button clicked to submit the form.
         */
        protected void Button2_Click(object sender, EventArgs e)
        {

            /* The forum has passed all of the validation rules for this case and we can add a new student to the list */
             if(Page.IsValid) {

                /*if its valid then create a new student object to put into the list of students
                  get the data from POST*/
                 myStudents.Add(new Student(FNameTextBox.Text, LNameTextBox.Text, SIDTextBox.Text, POSDropDownList.SelectedItem.Text, POListBox.SelectedItem.Text));

                 Label1.Text = "" + myStudents.Count;


              }

        }
    }

リピーターのコードは次のとおりです。

<asp:Repeater ID="Repeater1" runat="server">
  <HeaderTemplate>
         <table border="1">
            <tr>
               <td><b>First Name</b></td>
               <td><b>Last Name</b></td>
               <td><b>Student ID</b></td>
               <td><b>Program</b></td>
               <td><b>Option</b></td>
            </tr>
      </HeaderTemplate>

      <ItemTemplate>
         <tr>
            <td> <%# DataBinder.Eval(Container.DataItem, "FName")%> </td>
            <td> <%# DataBinder.Eval(Container.DataItem, "LName") %> </td>
            <td> <%# DataBinder.Eval(Container.DataItem, "STID")%> </td>
            <td> <%# DataBinder.Eval(Container.DataItem, "Program") %> </td>
            <td> <%# DataBinder.Eval(Container.DataItem, "Option") %> </td>
         </tr>
      </ItemTemplate>

      <AlternatingItemTemplate>
        <tr bgcolor="#e8e8e8">
          <td> <%# DataBinder.Eval(Container.DataItem, "FName")%> </td>
            <td> <%# DataBinder.Eval(Container.DataItem, "LName") %> </td>
            <td> <%# DataBinder.Eval(Container.DataItem, "STID")%> </td>
            <td> <%# DataBinder.Eval(Container.DataItem, "Program") %> </td>
            <td> <%# DataBinder.Eval(Container.DataItem, "Option") %> </td>
        </tr>
       </AlternatingItemTemplate>

      <SeparatorTemplate>
        <tr>
        <td colspan="5"><hr /></td>
        </tr>
      </SeparatorTemplate>

      <FooterTemplate>
         </table>
      </FooterTemplate>
</asp:Repeater>
4

3 に答える 3

2

DataBind は、新しい Student を DataSource に追加する前に完了します。

追加

Repeater1.DataBind();

あなたのクリックイベントで。

于 2012-09-30T18:32:26.880 に答える
0

私はあなたのコードをリファクタリングしました。今は動作するはずです

/* Class for the web form UI */
public partial class _Default : System.Web.UI.Page
{

    /* List of students to be displayed in the repeater control */
    private List<Student> myStudents = new List<Student>();

    protected void Page_Load(object sender, EventArgs e){

        /* Check postback value when the page loads - this is the first time */
        if (IsPostBack == false){
          this.bindRepeater();
        }
    }

 private void bindRepeater(){
  /* Bind the Collection to the Repeater control */
            Repeater1.DataSource = myStudents;
            Repeater1.DataBind();
            Label1.Text = "" + myStudents.Count;
            }

    /* 
     * Submit button clicked to submit the form.
     */
    protected void Button2_Click(object sender, EventArgs e)
    {

        /* The forum has passed all of the validation rules for this case and we can add a new student to the list */
         if(Page.IsValid) {

            /*if its valid then create a new student object to put into the list of students
              get the data from POST*/
             myStudents.Add(new Student(FNameTextBox.Text, LNameTextBox.Text, SIDTextBox.Text, POSDropDownList.SelectedItem.Text, POListBox.SelectedItem.Text));
             this.bindRepeater();


          }

    }
}
于 2012-09-30T19:23:28.323 に答える
0

値を保持できない理由がわかりました。セッションを利用する必要があります。データバインディングを行う前に、セッションを宣言する必要があります。

于 2012-10-01T20:39:05.277 に答える